Mysql 检索所有相关数据满足指定条件的行

Mysql 检索所有相关数据满足指定条件的行,mysql,sql,Mysql,Sql,我有一张工作桌和一张参观桌。一个作业可以有多次访问。我需要检索所有未设置为带薪的工作,并将与该工作集相关的所有访问设置为已完成 因此,基本上我只需要在以下情况下检索作业: 它还没有被支付 与该作业关联的所有访问都设置为“完成状态”=2 显然,执行以下操作不起作用,因为它将返回job.paid='N'和visit.status='2'的任何结果: 我可以检索结果,并运行其他查询以检查作业的所有访问是否已完成,但我想知道是否可以在单个查询中检索数据?更新1 SELECT * FROM job j

我有一张工作桌和一张参观桌。一个作业可以有多次访问。我需要检索所有未设置为带薪的工作,并将与该工作集相关的所有访问设置为已完成

因此,基本上我只需要在以下情况下检索作业:

它还没有被支付 与该作业关联的所有访问都设置为“完成状态”=2 显然,执行以下操作不起作用,因为它将返回job.paid='N'和visit.status='2'的任何结果:

我可以检索结果,并运行其他查询以检查作业的所有访问是否已完成,但我想知道是否可以在单个查询中检索数据?

更新1

SELECT * 
FROM job j 
WHERE j.paid = 'N' AND 
  NOT EXISTS (SELECT 1 FROM visit WHERE job_id = j.id AND visit.status <> 2);

如果您可能有一个没有任何访问记录的工作,并且如果它已支付='N',您仍然希望返回该工作记录,那么您将希望离开加入

SELECT * 
FROM JOB j
LEFT JOIN VISIT v
ON j.id = v.job_id
WHERE j.paid = 'N'
AND j.id NOT IN (SELECT job_id FROM visit WHERE status != 2)

不过,你在错误的表格中有paid列,除非OP在他的帖子中出错。他显示的是工作表中的paid列,而不是visions表中的paid列。
SELECT  a.ID  -- <<== add some columns here
FROM    job a INNER JOIN visit b ON a.id = b.job_ID
WHERE   a.paid = 'N'
GROUP   BY a.ID
HAVING  COUNT(DISTINCT b.Status) = 1 AND MAX(b.status) = 2
SELECT * FROM job WHERE paid = 'N' AND id NOT IN (
SELECT job_id FROM visit WHERE status != 2)
SELECT * 
FROM JOB j
LEFT JOIN VISIT v
ON j.id = v.job_id
WHERE j.paid = 'N'
AND j.id NOT IN (SELECT job_id FROM visit WHERE status != 2)