当ID不在一个查询中的另一个表中时,选择全部

时间:2014-11-07 16:25:42

标签: mysql subquery

通常,对于子查询,我通常会从其他表中获取有关某些内容的其他信息。 EG从一个表中获取用户详细信息,然后在同一查询中执行子查询并从另一个表获取用户权限。但是这次我发现自己难倒了,我需要从另一个表“辅助”中获取不存在的表'primary'中的所有用户(具有相关的job_ID)。

表:

primary
ID   |   email   |   name
1      a@a.c        a
2      a@b.c        b
3      a@c.c        c


secondary
ID   |  job_ID
1        1234 

查询

SELECT
        ID,
        email
    FROM
        primary
    WHERE
        ID does not exist from this query (SELECT
                                                ID
                                            FROM
                                                secondary
                                            WHERE
                                                ID = `1` AND
                                                job_ID = `1234`)

理论上,查询应该返回ID为1和2的用户。

这对于一个查询很容易,然后循环结果并运行其他查询,但这可能是一个mysql查询吗?从这里的其他帖子看,当第二场比赛只在一列而不是像这样的倍数时,这似乎是可能的。

1 个答案:

答案 0 :(得分:2)

是的,您可以使用IN例如:

SELECT id, email FROM primary
WHERE id NOT IN (SELECT id FROM secondary WHERE id = 1 AND job_id = 1234)

但仍使用子查询,如果您想在没有子查询的情况下执行此操作,则使用JOIN将获得相同的结果。例如,要显示另一个表中不存在的所有信息:

SELECT p.id, p.email FROM primary_table p
LEFT JOIN secondary_table s ON s.id = p.id
WHERE s.job_id IS NULL

要查看此查询的实际效果,请访问this SQL Fiddle