2012-06-01 51 views
3

這是我的SQLite數據庫的結構: enter image description here如何創建SQL DELETE語句以刪除第三個表中的行?

我想刪除所有屬於選擇OrderInfo.Cust_ID屬於特定CustData.Cust_ID化OrderData的。這是我的DELETE語句,它給我的錯誤:「沒有這樣的列:CustData.Customer_ID」

DELETE FROM OrderData 
    WHERE CustData.Customer_ID = OrderInfo.Cust_ID 
    AND OrderData.Order_ID = OrderInfo.Order_ID 
    AND CustData.Bus_Name = 'Albertsons' 

我知道,SQLite不支持在DELETE語句連接,所以我留下了WHERE並且用AND ;有人可以告訴我正確的方式來說話嗎?

+1

你可以嘗試使用IN子句的子查詢。 –

回答

10

你可以用IN子句嘗試子查詢。喜歡的東西:

DELETE FROM OrderData WHERE OrderData.Order_ID IN 
(SELECT OrderInfo.Order_ID 
FROM OrderInfo 
JOIN CustData on OrderData.Order_ID = OrderInfo.Order_ID 
WHERE CustData.Bus_Name = 'Albertsons') 

以刪除只是這樣做之前測試查詢:(將返回將被刪除查詢刪除所有行)

SELECT * FROM OrderData WHERE OrderData.Order_ID IN 
(SELECT OrderInfo.Order_ID 
FROM OrderInfo 
JOIN CustData on OrderData.Order_ID = OrderInfo.Order_ID 
WHERE CustData.Bus_Name = 'Albertsons') 
+0

保羅:我從來沒有使用IN子句的子查詢(SQLite的文檔甚至沒有提到它)...所以我在想,如果你能花一點時間,並在「some_table」和「some_other_table」善有善報填?另外,有關子查詢(針對SQLite)的一個很好的教程將不勝感激(我不想離開這不知道我在做什麼!):D – SpokaneDude

+0

@ spokane-dude:我更新了答案。我認爲它實際上與davids發佈的內容非常相似......我也在嘗試實際刪除之前添加了一個測試查詢。它應該工作,因爲DELETE並不實際執行JOIN。子查詢中將JOIN隔離,該子查詢將所有ID返回到頂級查詢的IN子句中。 –

+0

@ spokane-dude:哎呀。在查詢中有問題。編輯答案。請再試一次。 –

1

你不能。

SQLite (under v3.6.19) does not support foreign key constraints

,但你可以使用triggers例如 檢查this它會幫助你。

如果你有v 3.6.19,它已經支持外約束與ON UPDATEDELETE CASCADESQLite Foreign Key Support

編輯:

或喜歡寫@保羅薩西克

0

嘗試

DELETE FROM OrderData 
WHERE OrderData.Order_ID IN (SELECT oi.Order_ID FROM OrderInfo oi 
    INNER JOIN CustData cd ON oi.Cust_id = cd.Customer_Id WHERE cd.Bus_Name='Albertsons') 
+1

這是SQLite ...不能在SQLite中使用JOIN與DELETE ...無論如何,謝謝 – SpokaneDude

+0

我不熟悉SQLite,但加入是在一個子查詢,這沒有什麼區別? – davids

+0

我的評論與@Paul Sasik基本相同,只是使用您的列和表格。 – davids