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