[英]SQL Server query - return null value if no match
我遇到了一個我出於某種原因無法弄清楚的問題。 我正在嘗試編寫一個連接兩個表的查詢,其中可能在表中找不到匹配項。 如:
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
沒有匹配項,則表示沒有返回任何內容。 但是,如果沒有匹配並且仍然從Table1
返回值,我需要它為該列返回NULL。
我用我能想到的一切改變了JOIN
,但無濟於事。
Table2.Category
可以包含多個其他值,因此執行OR IS NULL
類型的交易將不起作用。
所以,如果Table2.Category = 'Foo'
沒有匹配,我仍然需要它返回:
Table1 | Table2
----------------
12345 | NULL
有什么建議?
將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'
嘗試這個:
LEFT OUTER JOIN
Table2 ON Table1.PesonID = Table2.PersonID
AND Table2.Category = 'Foo'
然后從WHERE子句中刪除'Foo'行
問題不在於連接本身,而在於與table2匹配的where子句中的要求。 我用coalese(table2.category,'Foo')='Foo'來解決這個問題。 這樣,如果table2為null,它仍將匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.