3

这是我的 SQLite 数据库的结构: 在此处输入图像描述

我正在尝试删除属于特定 CustData.Cust_ID 的选择 OrderInfo.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 语句中的 JOIN,所以我只剩下 WHERE 和 AND;有人可以告诉我正确的说法吗?

4

3 回答 3

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')
于 2012-06-01T17:08:52.797 回答
1

你不能。

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

,但您可以使用triggers例如 Check this它会帮助您。

如果您有 v 3.6.19,它已经支持 ONUPDATEDELETE CASCADE Read SQLite Foreign Key Support的外部约束

编辑:

或喜欢写@Paul Sasik

于 2012-06-01T17:07:23.523 回答
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')
于 2012-06-01T17:09:44.007 回答