通常使用子查询,我通常会从其他表中获得有关某些内容的附加信息。EG从一个表中获取用户详细信息,然后在同一个查询中执行子查询并从另一个表获取用户权限。但这一次我发现自己被难住了,我需要从另一个表"secondary"中获取不存在的表"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查询,这可能吗?从这里的其他帖子来看,当第二场比赛只在一列上,而不是像这次这样的倍数上时,这似乎是可能的。
是的,您可以使用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
要查看此查询的操作,请访问此SQL Fiddle