2016-08-26 3 views
0

У меня проблема с моим SQL-запросом. У меня есть рабочий стол и job_feature. Теперь каждый объект имеет работу многие художественногоMYSQL Query для большего количества условий

Пример: Работа 1 имеет функцию 1, 2, 9. Так что теперь мне нужен этот запрос: Select job has feature (1 or 2) and 9. Advanced. Select job has feature (1 or 2 or 3) and (9 or 10) и ... при использовании этого запроса

SELECT * 
FROM `m_job` as job 
JOIN `d_job_feature` as jf ON job.id= jf.job_id 
WHERE (jf.feature_id = 1 OR jf.feature_id = 2) 
AND jf.feature_id = 9; 

=> возвращает пустой данные

Так что теперь, как я могу с помощью SQL для запроса этих данных. Спасибо!

ответ

2

Проблема с вашим запросом - feature_id для данной строки не может равняться 1 или 2, а также 9. Вместо этого вам необходимо сгруппировать свои функции с помощью group by. Затем вы можете использовать condition aggregation, чтобы узнать, могут ли существовать оба условия для данной функции.

Вот один вариант использования exists:

select * 
from m_job as m 
where exists (
    select 1 
    from d_job_feature as d 
    where m.id=d.job_id 
    group by d.job_id 
    having max(case when d.feature_id in (1,2,3) then 1 else 0 end) = 1 and 
      max(case when d.feature_id in (9,10) then 1 else 0 end) = 1 
) 
+0

Удивительно, это прекрасно работает. Благодарю тебя. – dungphanxuan

1

Что делать, если вы присоединитесь два запроса?

SELECT * 
FROM (
    SElECT`m_job` as job 
JOIN `d_job_feature` as jf ON job.id= jf.job_id 
WHERE jf.feature_id in(1,2,3) 
) as t1 INNER JOIN 
(
SELECT job.id 
FROM `m_job` as job 
JOIN `d_job_feature` as jf ON job.id= jf.job_id 
WHERE jf.feature_id IN (9,10) 
) as t2 ON t2.id ==t1.id 
+0

Спасибо Рио, я следую за @sgeddes и это отлично работает. У моей базы данных больше возможностей. Пример запроса: «Выбрать задание имеет функцию (1 или 2 или 3) и (9 или 10) И (12 или 15) ...». если вы используете этот запрос, поэтому он очень сложный – dungphanxuan

+1

проблем. Я бы никогда не подумал сделать это, как @sgeddes. любите изучать новые вещи! Удачи – Rio

Смежные вопросы