2011-09-15 41 views
2

我有一個工作的mysql查詢,它返回所有未在類中註冊的人員。 SQL是:SQL查詢刪除NOT IN查詢的結果

SELECT * FROM person 
LEFT JOIN attendance 
ON (person.id = attendance.pid) 
WHERE (attendance.pid IS NULL 
) 

現在,我想刪除該結果中的每個人。什麼是最好的方法來做到這一點?我試着將「SELECT *」改爲「DELETE」,這給我一個語法錯誤。有任何想法嗎?

+1

的數據庫您使用的引擎? –

+0

我假設你在使用'delete'的時候記得把'*'拿出來? – Beef

+0

http://stackoverflow.com/questions/5835589/sql-2-tables-how-to-delete-rows-if-id-not-referenced-in-both-tables/5835619#5835619 –

回答

5

假設你想刪除所有的人沒有考勤記錄:

DELETE FROM person WHERE id NOT IN (SELECT pid FROM attendance) 
+0

單挑:如果參加者有空pid,我認爲這不會起作用。 –

+0

@Derek,這是依賴於實現的。您可以通過將WHERE pid IS NOT NULL添加到子選擇來處理它。 –

+0

@Robert,如果在子選擇的結果中出現NULL,那麼一些引擎將不允許任何記錄匹配。 –

1

嘗試將其更改爲

DELETE person 
FROM person 
LEFT JOIN attendance 
ON (person.id = attendance.pid) 
WHERE (attendance.pid IS NULL 
) 
0

這取決於發動機。 在PL/SQL或也許另一個則可能是:

DELETE FROM person where person.id not in(
    SELECT a.pid FROM attendance a 
) 

[未測試]