2013-03-20 150 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