通常,对于子查询,我通常会从其他表中获取有关某些内容的其他信息。 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查询吗?从这里的其他帖子看,当第二场比赛只在一列而不是像这样的倍数时,这似乎是可能的。
答案 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