要想从people
行那里是没有info
与该people
和特定行的行,你可以使用反连接模式。
例如:
SELECT p.id AS `person_id`
, p.people_name AS `person_name`
FROM people p
LEFT
JOIN people_info i
ON i.people_id = p.id
AND i.info_id = ?
WHERE i.people_id IS NULL
ORDER BY p.id
这不是返回这个结果的唯一查询模式。有一对夫妇别人的,例如,使用NOT EXISTS和相关子查询:
SELECT p.id AS `person_id`
, p.people_name AS `person_name`
FROM people p
WHERE NOT EXISTS (SELECT 1
FROM people_info i
WHERE i.people_id = p.id
AND i.info_id = ?
)
ORDER BY p.id
如果你想返回不相关的所有元组(people,info)
,而不是只是一个单一的info
,这也可以实现。所提供的规范对将要提供什么价值以及预期产出的一个例子是不明确的。上面的答案只解决了几种可能的解释之一。
如果我们希望将所有三个表涉及...以获取谁尚未通知所有的人所有的信息,我们可以使用一个反连接模式:
SELECT p.id AS `person_id`
, p.people_name AS `person_name`
, i.id AS `info_id`
, i.info_name AS `info_name`
FROM people p
CROSS
JOIN info i
LEFT
JOIN people_info n
ON n.people_id = p.id
AND n.info_id = i.id
WHERE n.people_id IS NULL
ORDER BY p.id, i.id
可以添加样本数据集有助于低估 –
查看示例表格图像?很少有样本数据 – Aelaf
您可以将它附加到问题 –