簡體   English   中英

WHERE子句中的MYSQL CASE語句以及WHERE語句中帶有IS NULL的其他LEFT OUTER JOIN

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

SQL小提琴演示

暫無
暫無

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

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