3

これは私のSQLiteデータベースの構造です: ここに画像の説明を入力してください

特定のCustData.Cust_IDに属するselectOrderInfo.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、しかし、たとえば使用できますこれを確認してください。

v 3.6.19 を使用している場合は、ONUPDATEまたはDELETE CASCADE Read SQLite 外部キー サポートによる外部制約を既にサポートしています。

編集:

または @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 に答える