mysql - 在一对多关系的多方进行过滤

标签 mysql sql one-to-many

我有两个表: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=1industry=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/

相关文章:

java - Mongo Java 查询、DBRef 和一对多关系

mysql - 有没有办法在同一列上进行 SELF JOIN?

MySQL IN 问题

mysql - phpMyAdmin 未显示所有行 - 显示的总记录数错误

php - 超过 100 个表的大规模 SQL 查询

java - Hibernate 在获取实体集合后查询实体

mysql - mysql中的表情符号变成问号

mysql - 如何用grails更新MySql表中的数据?

php - 如何使用 PHP 生成正确的订单号?

sql - 冲突时增加文本列 "cool name"--> "cool name 1"