簡體   English   中英

向JOIN或WHERE子句添加多個條件時,查詢不為字段生成任何記錄

[英]Query produces no records for a field when adding more than one condition to JOIN or WHERE clause

以下查詢返回大量記錄,並且字段DT_Cancelled包含所有帶有時間戳的值。 這是預料之中的(DT_Created和Upgraded現在現在也都按預期為空):

SELECT 
        co.email,
        co.id,
        CASE WHEN my.my_id = 581 THEN my.data END AS DT_Created,
        CASE WHEN my.my_id = 3347 THEN my.data END AS DT_Upgraded,
        CASE WHEN my.my_id = 3014 THEN my.lastmod END AS DT_Cancelled
    FROM 
        ex_emails.cid208 co
        INNER JOIN ex_emails.my208 my ON my.eid = co.id 
        WHERE my.my_id = 3014
        GROUP BY email

但是,以下查詢將生成一個結果集,其中DT_Cancelled具有所有NULL值。

SELECT 
        co.email,
        co.id,
        CASE WHEN my.my_id = 581 THEN my.data END AS DT_Created,
        CASE WHEN my.my_id = 3347 THEN my.data END AS DT_Upgraded,
        CASE WHEN my.my_id = 3014 THEN my.lastmod END AS DT_Cancelled
    FROM 
        ex_emails.cid208 co
        INNER JOIN ex_emails.my208 my ON my.eid = co.id 
        WHERE (my.my_id = 581 OR my.my_id = 3347 OR my.my_id = 3014) # Here is the altered line
        GROUP BY email

然后,我嘗試了此操作,但得到了相同的結果:DT_Cancelled為所有NULL值。

SELECT 
        co.email,
        co.id,
        CASE WHEN my.my_id = 581 THEN my.data END AS DT_Created,
        CASE WHEN my.my_id = 3347 THEN my.data END AS DT_Upgraded,
        CASE WHEN my.my_id = 3014 THEN my.lastmod END AS DT_Cancelled
    FROM 
        ex_emails.cid208 co
        INNER JOIN ex_emails.my208 my ON my.eid = co.id AND (my.my_id = 581 OR my.my_id = 3347 OR my.my_id = 3014) 
        GROUP BY email

我曾希望看到我從上述查詢中看到的所有記錄。 為什么我在進行此修改后丟失了它們?

您的GROUP BY不好。

當您使用GROUP BY時,您需要添加所有未與SUM或MAX或AVG或您所擁有的內容進行聚合的字段。 MySQL允許運行此錯誤查詢(這真是愚蠢),即使SQL錯誤並且mySQL試圖猜測您的意思也是如此。 通過將所有內容與GROUP BY 1,2,3,4,5分組來修復GROUP BY ,然后再次運行每個查詢。 如果那不能解決問題,那么也許我們可能需要一些示例數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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