2

delete を使用して行を削除し、mysql を選択する方法

私はこの行を使用していません:

delete from items T1 where T1.base_item = 
(SELECT T2.type,T2.id From furniture T2 where T2.type = 'i' );
4

3 に答える 3

3

=サブセレクトが結果セットを返す間、単一の値が期待されるため、これは機能しません。

実行できるアプローチは 2 つありますIN()。句を使用する方法と、結合全体で削除する方法です。

最初は次のようになります。

DELETE FROM items
WHERE base_item IN (SELECT id FROM furniture WHERE type = 'i')

副選択では、1 つのフィールドのみを指定する必要があることに注意してください。この場合にfurniture.id関係していると思います。items.base_itemが本当に一致するフィールドである場合furniture.typeは、代わりに副選択でそれを使用します。

2 番目のアプローチは次のようになります。

DELETE items
FROM items INNER JOIN furniture
  ON items.base_item = furniture.id
WHERE furniture.type = 'i'

繰り返しますが、ここでの私の仮定は、 にitems.base_item関連していfurniture.idます。

どちらを使用するのが適切か (該当するすべてのフィールドがインデックス化されていると仮定) は、各テーブルで予想される行数とデータのカーディナリティに依存する可能性があります。ユースケースにとってどちらがより効率的かを確認するために、自分自身をテストすることをお勧めします。

于 2013-10-07T19:28:57.720 に答える