簡體   English   中英

MySQL如何在where子句中將IF與IN一起使用?

[英]Mysql how to use IN with IF in where clause?

我想要這樣的東西:

SELECT
  p.name_en AS 'province_$lang',
  p.province_code AS 'province_code_$lang',
  COUNT(u.id) AS 'total_$lang',
  COUNT(u.id) AS total
FROM applications AS a 
LEFT JOIN users AS u on u.id = a.user_id 
LEFT JOIN provinces AS p on p.province_code = u.province_code
WHERE a.progress_status IN (0,1,2,3) AND IF( a.progress_status = 2,a.denial_type ,1) IN IF(a.`progress_status` = 2,(1,2,3),1)
GROUP BY u.province_code

假設我在表中有兩個字段,其中一個是progress_status ,可以具有這些0,1,2, or 3值之一,另一個字段denial_type可以具有1,2, or 3 ,但是denial_type僅可以采用這些值之一當progress_status為2時的值。所以我想檢查一下progress_status是否為IN 0、1,2、3,對於那些記錄,其progress_status為2,則其denial_type應該為IN 1,2,3。

嘗試這個:

SELECT
p.name_en AS 'province_$lang',
p.province_code AS 'province_code_$lang',
COUNT(u.id) AS 'total_$lang',
COUNT(u.id) AS total
FROM applications AS a 
LEFT JOIN users AS u on u.id = a.user_id 
LEFT JOIN provinces AS p on p.province_code = u.province_code
WHERE a.progress_status IN (0,1,2,3) AND   
IF( a.progress_status = 2,  
(select denial_type from applications where denial_type IN (1,2,3)) ,1) 
GROUP BY u.province_code   

IF條件下使用subquery僅選擇那些值為IN (1,2,3) denial_type可能會解決您的問題。

希望能幫助到你!

聚合后過濾應該可以解決問題

SELECT
  p.name_en AS 'province_$lang',
  p.province_code AS 'province_code_$lang',
  COUNT(u.id) AS 'total_$lang',
  COUNT(u.id) AS total
FROM applications AS a 
LEFT JOIN users AS u on u.id = a.user_id 
LEFT JOIN provinces AS p on p.province_code = u.province_code
GROUP BY u.province_code
HAVING SUM(a.progress_status IN (0,1,2,3))>0
AND SUM(a.progress_status = 2 AND a.denial_type IN(1,2,3))>0

暫無
暫無

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

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