2015-12-18 61 views
1

我有以下SQL查詢:可以在SQL刪除查詢中使用別名嗎?

DELETE FROM table_b b WHERE NOT EXISTS (SELECT * FROM table_a a WHERE a.some_id = b.some_id) 

,並正在以下錯誤:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b WHERE NOT EXISTS(SELECT * FROM table_a a WHERE a.some_id = b.some_id)' at line 1

這似乎表明,別名不能與SQL delete語句中使用

回答

3

如果我正確理解您的查詢和你想刪除不在表格從B表中的所有記錄。一個更清潔的方式來寫它可能是

DELETE FROM table_b WHERE id NOT IN (SELECT id FROM table_a) 
+0

我喜歡這種方法,因爲它避免使用相關的子查詢。 https://en.wikipedia.org/wiki/Correlated_subquery –

+0

關於Saharsh寫的是什麼,這是不是有錯誤,因爲DELETE和FROM之間缺少別名b? (你現在可以完全刪除別名,或混合在Saharsh的解決方案中) –

+0

是的你的權利我已經更新並刪除別名,認爲它使整體更清潔。 –

3

(?)是的,您可以在DELETE查詢中使用別名。只需在DELETE關鍵字後面使用該別名即可。它指定從哪個表中刪除記錄。

試試這個:

DELETE b 
FROM table_b b 
WHERE NOT EXISTS (SELECT * FROM table_a a WHERE a.some_id = b.some_id)