Подтвердить что ты не робот

Запрос SQL Server - возвращает значение null, если нет соответствия

У меня возникает проблема, которую я почему-то не могу понять. Я пытаюсь написать запрос, который объединяет две таблицы, в которых совпадение не может быть найдено в таблице. Например:

SELECT 
    Table1.IDField, Table2.IDField
FROM 
    Table1
LEFT OUTER JOIN 
    Table2 ON Table1.PersonID = Table2.PersonID
WHERE 
    (Table1.IDField = '12345')
    AND (Table2.Category = 'Foo')

Если в Table2 нет совпадения, это ничего не возвращает. Однако мне нужно, чтобы он просто возвращал NULL для этого столбца, если нет совпадения и по-прежнему возвращает значение из Table1.

Я изменил JOIN со всем, что я могу придумать, но безрезультатно.

Table2.Category может содержать несколько других значений, поэтому работа типа OR IS NULL не будет работать.

Итак, если нет соответствия для Table2.Category = 'Foo', мне все равно нужно вернуть его:

Table1 | Table2
----------------
 12345 |  NULL

Любые предложения?

4b9b3361

Ответ 1

Переместите условие table2 из вашего предложения WHERE и в JOIN.

SELECT 
    Table1.IDField, Table2.IDField
FROM 
    Table1
LEFT OUTER JOIN Table2 
    ON Table1.PersonID = Table2.PersonID
    AND Table2.Category = 'Foo'
WHERE 
    Table1.IDField = '12345'

Ответ 2

Попробуйте следующее:

LEFT OUTER JOIN
Table2 ON Table1.PesonID = Table2.PersonID
AND Table2.Category = 'Foo'

затем удалите строку "Foo" из предложения WHERE

Ответ 3

Проблема заключается не в соединении как таковом, а в требовании в предложении where, которое соответствует таблице2. Я решил это с помощью каменноугольной (table2.category, 'Foo') = 'Foo'. Таким образом, если таблица2 имеет значение null, она все равно будет соответствовать.