web-dev-qa-db-ja.com

LEFT JOINを使用して削除する

最初のテーブルを参照する別のテーブルに存在するデータに応じてテーブルから削除したいのですが、SELECTステテメントとして実行するときに削除する値を示すコードがありますが、それを変更するとDELETEを実行するとエラーが発生します。エラーが発生する理由がわかりません。

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を使用しています

20
Matt

私がそれを見るところから、あなたは実際にこれを実行するために結合を必要としません...

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

1)8とは異なるcustomerIDを持つleadcustomerのすべてのレコードを削除します。2)ステータスが「R」または「H」のテーブルフライト予約ではありません。

それはあなたがやろうとしていることではありませんか?

14
Laurent S.

サンプル。テーブル 'A'のレコードを削除ISテーブル '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
49
user3048858

これを行う必要があります:

IDが含まれるTableAから削除します(tableAからIDを選択します。a.ID= b.IDの左外部結合tableBb。b.IDはNULLです)。

0
Kyle