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

SQL Server查询-如果不匹配,则返回空值,sql,sql-server,join,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 = 'Fo

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

SELECT 
    Table1.IDField, Table2.IDField
FROM 
    Table1
LEFT OUTER JOIN 
    Table2 ON Table1.PersonID = Table2.PersonID
WHERE 
    (Table1.IDField = '12345')
    AND (Table2.Category = 'Foo')
如果
表2中没有匹配项,则不会返回任何内容。但是,如果没有匹配项,我需要它只为该列返回NULL,并且仍然从
表1
返回值

我已经用我能想到的一切改变了
加入
,但是没有用

Table2.类别
可以包含多个其他值,因此执行
或为空
类型的交易将不起作用

因此,如果
Table2.Category='Foo'
没有匹配项,我仍然需要它返回:

Table1 | Table2
----------------
 12345 |  NULL
有什么建议吗?

试试这个:

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

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

表2
的条件从
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'

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

使用
其中Table1.IDField='12345'和(table2.Category='Foo'或table2.Category为null)
应该完全按照您描述的方式工作it@marc_s-每当我修改WHERE子句来执行此操作时,它根本不返回任何行。我正在MS SQL Server Management Studio中运行此查询。