要想從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
您可以將它附加到問題 –