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中运行此查询。