2016-11-05 4 views
2

Я хочу иметь что-то вроде этого:Mysql как использовать IN с IF в том месте где?

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

+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 

Использование subquery в IF состоянии выбрать только те denial_type, значение которого IN (1,2,3) может решить вашу проблему.

Надеюсь, это поможет!

+0

Подзапрос возвращает более одной строки. – jones

+0

Попробуйте использовать 'LIMIT':' select 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 
Смежные вопросы