如何创建SQL DELETE语句以删除第3个表中的行?

时间:2012-06-01 17:02:18

标签: sql sqlite

这是我的SQLite数据库的结构: enter image description here

我正在尝试删除属于选择OrderInfo.Cust_ID的所有OrderData,它属于特定的CustData.Cust_ID。这是我的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语句中的JOIN,所以我留下了WHERE和ANDs;有人可以告诉我说出这个的正确方法吗?

3 个答案:

答案 0 :(得分:11)

您可以尝试使用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')

答案 1 :(得分:1)

你做不到。

  

SQLite(在v3.6.19下)不支持外键约束

,但您可以使用triggers 检查this它会对您有所帮助。

如果你有v 3.6.19,它已经支持ON UPDATEDELETE CASCADE的外部约束 阅读SQLite Foreign Key Support

修改

或者喜欢写@Paul Sasik

答案 2 :(得分: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')