[英]MYSQL CASE statement in WHERE clause AND additional LEFT OUTER JOIN with IS NULL in WHERE statement
我設置了一個簡單的小提琴來演示我的示例。
http://sqlfiddle.com/#!2/b7c813/7/0
有一個人表和一個答案表。 出於演示目的,它們已簡化為該特定查詢所需的列。
我理想的最終結果集看起來與上面的小提琴類似。
person_id, name, took_form_14, took_form_15
但是,我只想讓那些采用EITHER 14表格或15號表格,或完全不采用14 NOR表格15表格的人,而不是同時采用這兩種方式的人(在兩列中均為真)。
我想我可以使用一個附加的WHERE
子句來簡單地返回結果為NULL
那些結果,但是我似乎無法確定刪除在take_form_14和taked_form_15都為真的情況下的語法。
當我嘗試時,出現以下錯誤:
Invalid use of group function:
SELECT p.*,
MAX(CASE WHEN form_id = 14 THEN 'true' ELSE 'false' END) AS took_form_14,
MAX(CASE WHEN form_id = 15 THEN 'true' ELSE 'false' END) AS took_form_15
FROM people p
LEFT JOIN answers a ON a.person_id = p.id
WHERE(
MAX(CASE WHEN form_id = 14 THEN 'true' ELSE 'false' END) = 'false'
OR
MAX(CASE WHEN form_id = 15 THEN 'true' ELSE 'false' END) = 'false' )
GROUP BY p.id
我要去哪里錯了?
另外,有人可以解釋為什么我需要在我的case語句之前使用MAX函數,還是得到不同的結果?
謝謝你的幫助。
您需要使用HAVING而不是其他位置。
就像是
SELECT p.*,
MAX(CASE WHEN form_id = 14 THEN 'true' ELSE 'false' END) AS took_form_14,
MAX(CASE WHEN form_id = 15 THEN 'true' ELSE 'false' END) AS took_form_15
FROM people p
LEFT JOIN answers a ON a.person_id = p.id OR a.person_id IS NULL
GROUP BY p.id
HAVING took_form_14 = 'false' OR took_form_15 = 'false'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.