我有一個工作的mysql查詢,它返回所有未在類中註冊的人員。 SQL是:SQL查詢刪除NOT IN查詢的結果
SELECT * FROM person
LEFT JOIN attendance
ON (person.id = attendance.pid)
WHERE (attendance.pid IS NULL
)
現在,我想刪除該結果中的每個人。什麼是最好的方法來做到這一點?我試着將「SELECT *」改爲「DELETE」,這給我一個語法錯誤。有任何想法嗎?
我有一個工作的mysql查詢,它返回所有未在類中註冊的人員。 SQL是:SQL查詢刪除NOT IN查詢的結果
SELECT * FROM person
LEFT JOIN attendance
ON (person.id = attendance.pid)
WHERE (attendance.pid IS NULL
)
現在,我想刪除該結果中的每個人。什麼是最好的方法來做到這一點?我試着將「SELECT *」改爲「DELETE」,這給我一個語法錯誤。有任何想法嗎?
假設你想刪除所有的人沒有考勤記錄:
DELETE FROM person WHERE id NOT IN (SELECT pid FROM attendance)
單挑:如果參加者有空pid,我認爲這不會起作用。 –
@Derek,這是依賴於實現的。您可以通過將WHERE pid IS NOT NULL添加到子選擇來處理它。 –
@Robert,如果在子選擇的結果中出現NULL,那麼一些引擎將不允許任何記錄匹配。 –
嘗試將其更改爲
DELETE person
FROM person
LEFT JOIN attendance
ON (person.id = attendance.pid)
WHERE (attendance.pid IS NULL
)
這取決於發動機。 在PL/SQL或也許另一個則可能是:
DELETE FROM person where person.id not in(
SELECT a.pid FROM attendance a
)
[未測試]
的數據庫您使用的引擎? –
我假設你在使用'delete'的時候記得把'*'拿出來? – Beef
http://stackoverflow.com/questions/5835589/sql-2-tables-how-to-delete-rows-if-id-not-referenced-in-both-tables/5835619#5835619 –