2013-03-20 157 views
12

我想從表中刪除,這取決於引用第一個表的另一個表上存在的數據,但是,當我將其作爲SELECT實例運行時,我的代碼可以工作並顯示要刪除的值但是,當我將其更改爲DELETE時,它會給我帶來錯誤,我不明白他們爲什麼會在那裏。使用LEFT JOIN刪除

DELETE leadCustomer.* FROM coursework.leadCustomer LEFT JOIN coursework.flightBooking 
ON leadCustomer.customerID = flightBooking.customerID 
WHERE leadCustomer.customerID NOT IN (
SELECT customerID FROM (SELECT customerID, status FROM coursework.flightBooking) AS 
StatusCount where status IN ('R','H') GROUP BY customerID 
) 
AND leadCustomer.customerID = 8; 

錯誤:

ERROR: syntax error at or near "leadCustomer" 
LINE 1: DELETE leadCustomer.* FROM coursework.leadCustomer LEFT JOIN... 
      ^

********** Error ********** 

ERROR: syntax error at or near "leadCustomer" 
SQL state: 42601 
Character: 8 

我使用Postgres的

+2

使用'從表中刪除其中id在(你的選擇查詢)' – jonasnas 2013-03-20 11:22:11

+1

取出。*換上DELETE FROM loadCustomer .. .. – Rodolfo 2013-03-20 11:22:25

+0

試試這個:「DELETE leadCustomer FROM ...」 – Arvo 2013-03-20 11:22:47

回答

9

從我看到它,你實際上並不需要一個加入來執行此...

DELETE FROM coursework.leadCustomer 
WHERE leadCustomer.customerID NOT IN (
SELECT distinct customerID FROM coursework.flightBooking where status IN ('R','H') 
) 
AND leadCustomer.customerID = 8; 

它會刪除leadcustomer所有記錄了的customerID是: 1)從8 2不同)未在表與狀態flightbooking 'R' 或 'H'

這不就是你正在努力嗎?

+0

你說得對,我不需要加入。並且該中間行的整理也起作用,但是它所做的是給出一個ID,如果它沒有相關的狀態爲R或H的預訂,它將刪除該行 – Matt 2013-03-20 11:34:26

+0

但是,這不起作用,不會使用customerID的索引(如果你有一個)這可能是一個痛苦(檢查評論在這一個http://stackoverflow.com/questions/652770/delete-with-join-in-mysql) – zzarbi 2014-02-15 02:31:08

-3

刪除.*leadCustomer.* 即:

DELETE leadCustomer FROM coursework.leadCustomer LEFT JOIN coursework.flightBooking 
ON leadCustomer.customerID = flightBooking.customerID 
WHERE leadCustomer.customerID NOT IN (
SELECT customerID FROM (SELECT customerID, status FROM coursework.flightBooking) AS 
StatusCount where status IN ('R','H') GROUP BY customerID 
) 
AND leadCustomer.customerID = 8; 
+1

PostgreSQL不支持引用'DELETE'的'LEFT JOIN'。 – Skrol29 2014-07-09 13:06:53

-3

你可以試試這個

DELETE leadCustomer FROM coursework.leadCustomer lc 
LEFT JOIN coursework.flightBooking fb ON lc.customerID = fb.customerID 
and status IN ('R','H')and fb.customer_id is not null 
WHERE leadCustomer.customerID = 8; 
+0

我相信,基於[文檔](http ://www.postgresql.org/docs/9.3/static/sql-delete.html),這裏的'LEFT JOIN'會導致語法錯誤。 – 2014-04-15 00:40:51

+1

PostgreSQL不支持引用'DELETE'的'LEFT JOIN'。 – Skrol29 2014-07-09 13:07:12

0

你需要這樣做:

從表A 刪除其中 ID(選擇表A ID的 左外連接tableB的B關於a.ID = b.ID 其中b.ID爲NULL)

34

SAMPLE。刪除記錄在表 'A' 的是,有沒有記錄表 'H'

DELETE A FROM ARTICULO_ALMACEN A 
LEFT JOIN HISTORICO_UNION H 
ON A.COD_ARTICULO = H.COD_ARTICULO 
AND A.COD_ALMACEN = H.COD_ARTICULO_ALMACEN 
AND A.TPROPIEDAD1 = H.PROPIEDAD1 
AND A.TPROPIEDAD2 = H.PROPIEDAD2 
AND A.TPROPIEDAD3 = H.PROPIEDAD3 
WHERE H.COD_ARTICULO IS NULL 
+3

這個工程,這是標題 – Omu 2015-05-27 10:34:29

+3

這是不正確的答案這不工作postgres – Trev 2016-05-17 15:06:28

+0

問題標記爲postgresql但LEFT JOIN不適用DELETE在postgresql中。 – user9645 2016-12-20 12:46:29