我有两个表:jobs 和 job_industries(加入 jobs.id=job_industries.job_id
)。
我想找到所有带有 jobs.title like '%Finance%'
而没有 job_industries.industry=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 )
例如如果一个工作有两个 job_industry 关系(industry=1
和 industry=2
),那么这个工作将匹配查询。我更愿意找到没有的工作。
最佳答案
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;
关于mysql - 在一对多关系的多方进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9011064/