SQL Server查询 - 如果不匹配,则返回null值

时间:2013-01-04 16:28:43

标签: sql sql-server join

我遇到了一个我出于某种原因无法弄清楚的问题。我正在尝试编写一个连接两个表的查询,其中可能在表中找不到匹配项。如:

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

有什么建议吗?

3 个答案:

答案 0 :(得分:24)

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'

答案 1 :(得分:7)

试试这个:

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

然后从WHERE子句中删除'Foo'行

答案 2 :(得分:0)

问题不在于连接本身,而在于与table2匹配的where子句中的要求。我用coalese(table2.category,'Foo')='Foo'来解决这个问题。这样,如果table2为null,它仍将匹配。