2012-01-25 5 views
0

私は2つのテーブルを持っています:jobsとjob_industries(jobs.id=job_industries.job_idに参加)。 私はすべてjobs.title like '%Finance%'job_industries.industry=1なしで仕事を探しています。1対多のリレーションシップの多くの側のフィルター

ただし、以下のクエリを実行すると、タイトル条件に一致するすべてのジョブのリストが表示され、1ではない業界オプションが少なくとも1つあります。

select jobs.id, title, industry 
from `job_industries` 
left join jobs on jobs.id=`job_industries`.job_id 
where is_live=1 and jobs.`is_closed`=0 and 1 in (select industry from job_industries where job_id in) 

ジョブが2つのjob_industry関係(industry=1industry=2)を持つ場合、このジョブはクエリと一致します。私はそうでない仕事を見つけることを好むだろう。

答えて

4
SELECT j.id, j.title, ji.industry 
    FROM jobs j 
     INNER JOIN job_industries ji 
      ON j.id = ji.job_id 
       AND ji.industry <> 1 
    WHERE j.title LIKE '%Finance%' 
     AND j.is_live = 1 
     AND j.is_closed = 0 
     AND NOT EXISTS (SELECT 1 
          FROM job_industries ji2 
          WHERE ji2.job_id = j.id 
           AND ji2.industry = 1); 

また、あなたの代わりにこれを行うことができます:私は/考える

SELECT j.id, j.title, ji.industry 
    FROM jobs j 
     INNER JOIN job_industries ji 
      ON j.id = ji.job_id 
       AND ji.industry <> 1 
     LEFT JOIN job_industries ji2 
      ON j.id = ji2.job_id 
       AND ji2.industry = 1 
    WHERE j.title LIKE '%Finance%' 
     AND j.is_live = 1 
     AND j.is_closed = 0 
     AND ji2.job_id IS NULL; 
+0

唯一の補正は/あなたが行う必要があります。 =の代わりに - を使用しています。私は=に変換され、うまくいくように見えます。ありがとう! – Devin

+1

@Devinあなたは正しいですか?私はそれを修正します。私の太った指を呪う! –

0
select jobs.id, title, industry 
from `job_industries` 
left join jobs on jobs.id=`job_industries`.job_id AND job_industries.industry=1 
where is_live=1 and jobs.`is_closed`=0 and job_industries.industry IS NULL 
関連する問題