2016-08-26 10 views
0

私のSQLクエリに問題があります。 私はジョブテーブルとjob_featureを持っています。今、各ジョブオブジェクトは、多くの機能MYSQLより多くの条件を問い合わせる

例があります:Select job has feature (1 or 2) and 9.高度:ジョブ1は、だから今、私は、そのクエリを必要とする機能を1、2、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

クエリの問題は、特定の行の1,が1,2または9に等しくないことです。代わりに、フィーチャをgroup byにグループ化する必要があります。次に、condition aggregationを使用して、特定の機能に対して両方の条件が存在するかどうかを確認できます。ここで

1つのオプション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

あなたは2つのクエリを結合する場合は?

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

関連する問題