2017-12-11 17 views
0

特定のカテゴリIDを持たないテーブル "oc_products"からすべてのレコードを削除しようとしています。カテゴリが別のテーブルにあるため、INNER JOINを使用してこれらの製品をリストするSELECTクエリを作成しました。SQL INNER JOINを使用してテーブルからデータを削除する方法

私が理解できないことは、表示されたレコードを削除するためにDELETE関数を使用する方法です。

DELETE oc_product 
FROM oc_product 
INNER JOIN oc_product_to_category ON oc_product.product_id = oc_product_to_category.product_id 
WHERE oc_product_to_category.category_id = 343 

エラー "予期しないキーワード、(INNER JOINの近くを)" を示す。その:

これは私のコードは次のようになります。

+0

は、すべてのレコードを取得し、where句を使用するようにサブクエリを記述します。 DELETE oc_product oc_product from oc_product where(サブクエリ) – sreenivas

+0

@sreenivas試しましたが、エラー "**テーブル 'oc_product'が 'DELETE'のターゲットとデータの別のソースの両方として2回指定されています登場する。私は問題を理解しますが、私は何を変える必要がありますか? – kraguj

答えて

1

最初の行に。*を追加します。

試してみてください。

DELETE p.* FROM oc_product p 
INNER JOIN oc_product_to_category pc ON p.product_id = 
    pc.product_id 
WHERE pc.category_id = 343 
+0

それは完全に動作します。 「。*」が正確に何をしているのか、そして「p」と「pc」が何を表しているのか、あなたはおそらく説明できますか?助けてくれてありがとう。 – kraguj

+1

pとpcはエイリアスなので、毎回完全なテーブル名を使用する必要はありません。 p。*はpから行を削除し、pcからは削除しないと言うだけです。 – clinomaniac

+0

私は今、理解してくれたことを理解しています。 – kraguj

関連する問題