2

単一のステートメントで副選択によって生成されたIDのリストを削除しようとしています。これは可能ですか?私は次のことを試みてきました:

[編集]修正されたクエリ

DELETE from store 
WHERE  id in ( SELECT store.id 
               FROM   storeInfo 
               JOIN   store ON storeInfo.store_id = store.id
               WHERE  storeInfo.type = 17 )

しかし、これは正しくない構文です...これを正しく構築する方法がわかりません。

4

3 に答える 3

2
DELETE store
FROM store
JOIN storeInfo 
    ON storeInfo.store_id = store.id
WHERE storeInfo.type = 17
于 2012-11-20T19:58:23.020 に答える
2

JOIN質問のタイプミスの更新後 -サブクエリにa は必要ありません。サブクエリstoreInfo.store_idから戻るだけです。IN()

DELETE FROM `store` WHERE `id` IN (SELECT `store_id` FROM `storeInfo` WHERE `type` = 17)

storeMySQLでは、サブクエリでテーブルを使用してから行を削除することは許可されません。storeInfoただし、 と直接結合するので使用できますstore_id

これらのテーブルの両方から削除する必要がある場合(storeInfo親が から削除されたときに の行が孤立する場合など)、代わりに次の構文をstore使用します。JOIN

DELETE
  /* Syntax to delete rows from both tables */
  store, storeInfo
FROM 
  store JOIN storeInfo ON store.id = storeInfo.store_id
WHERE storeInfo.type = 17

詳細については、MySQLDELETE構文リファレンスを確認してください。

于 2012-11-20T20:00:14.263 に答える
0

結合を直接行うことができますdelete

delete store from store 
  JOIN storeInfo ON storeInfo.store_id = store.id 
  WHERE  store.type = 17;
于 2012-11-20T20:07:34.453 に答える