簡體   English   中英

為什么LEFT OUTER JOIN無法工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM