[英]Why can LEFT OUTER JOIN fail to work?
我有以下查詢
SELECT COUNT(*) FROM Samples
返回628
。
而下面的查詢
SELECT * FROM
(
SELECT
sa.*,
tagLists.tagNames AS tagNames,
tagLists.ProjectID AS ProjectID
FROM Samples sa
LEFT OUTER JOIN TagLists tagLists
ON sa.spotID = tagLists.taggedItemID
AND 6 = tagLists.taggedItemType
) ex
WHERE ex.ProjectID IS NULL
返回空表。
換句話說,外部聯接查詢
SELECT
sa.*,
tagLists.tagNames AS tagNames,
tagLists.ProjectID AS ProjectID
FROM Samples sa
LEFT OUTER JOIN TagLists tagLists
ON sa.spotID = tagLists.taggedItemID
AND 6 = tagLists.taggedItemType
不包含ProjectID
為null的任何行。
為什么? LEFT OUTER JOIN
是否保證左表中的所有行都應顯示?
UPDATE
抱歉,當然在 tagLists
實際上沒有空連接的行。
更新2
抱歉,我是個傻瓜:確實有很多我不關心的非空行...
查詢不返回任何數據的唯一情況是,當Samples
每一行在TagLists
都有對應的行滿足連接條件時,所有此類行在ProjectID
字段中都具有非NULL值。 換句話說,每個樣本都有一個類型為6的標簽列表項。
測試此問題的好方法是刪除WHERE
子句,並驗證所有628行返回有效的ProjectID
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.