2016-11-05 112 views
2

我想有这样的事情:Mysql如何在IF中使用IN in where子句?

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_statusIN 0,1,2,3和这些记录其progress_status为2,则其denial_type应该IN 1,2,3

+0

它是一个'选择query'。你也可以显示你的整个查询? –

+0

@MilanGupta我有更新我的问题。 – jones

回答

0

试试这个:

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只选择那些denial_type,其值是IN (1,2,3)可能会解决你的问题。

希望它有帮助!

+0

子查询返回多个行。 – jones

+0

尝试使用'LIMIT':'从应用程序中选择denial_type,其中denial_type IN(1,2,3)LIMIT 1' –

0

帖子汇总筛选应该做的伎俩

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