2016-08-26 163 views
0

我有我的SQL查詢問題。 我有工作表和job_feature。現在每個招聘對象具有許多功能MYSQL查詢更多條件

例:工作1具有的功能1,2,9 所以現在我需要一個查詢:Select job has feature (1 or 2) and 9.高級。 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)AND(12或15)...'的示例。如果使用那個查詢,那麼它非常複雜 – dungphanxuan

+1

沒問題。我永遠不會想到像@sgeddes那樣做。愛學習新事物!祝你好運 – Rio