Как структурировать левое соединение и исключить соответствующий идентификатор.WHERE NULL пункт не работает - PullRequest
0 голосов
/ 27 марта 2019

Я хочу выбрать строки из левой таблицы, которые не имеют совпадений в правой таблице, но получают ошибку «неправильный синтаксис в ГДЕ».Это выглядит как простое объединение, но я не могу заставить его работать с "WHERE r.id IS NULL".

Правильно ли я понимаю, что LEFT JOIN / WHERE rightTable.id IS NULL должен выдаватьсписок элементов leftTable, которые не совпадают в таблице rightTable?

  SELECT l.*
  INTO #temp_length
  FROM leftTable l
  LEFT JOIN rightTable r
        ON l.id = r.id
        WHERE r.id IS NULL
        AND l.start <= r.start
        AND l.end > r.start
        WHERE l.type IN ('A', 'B', 'C')
        AND l.id IN (SELECT id FROM lookupTable WHERE d_type = 'Z')
        AND l.disabled = 'N'
        AND r.latest = 'Y';

1 Ответ

0 голосов
/ 27 марта 2019

Попробуйте ниже - вы включаете одно условие where, тогда как вы использовали два, а также перемещаете другие условия, кроме r.id IS NULL in ON clause

SELECT l.*
  INTO #temp_length
  FROM leftTable l
  LEFT JOIN rightTable r
        ON l.id = r.id AND l.start <= r.start
        AND l.end > r.start and l.type IN ('A', 'B', 'C') AND l.id IN (SELECT id FROM lookupTable WHERE d_type = 'Z')
        AND l.disabled = 'N'
        AND r.latest = 'Y'
        WHERE r.id IS NULL
...