delete を使用して行を削除し、mysql を選択する方法
私はこの行を使用していません:
delete from items T1 where T1.base_item =
(SELECT T2.type,T2.id From furniture T2 where T2.type = 'i' );
=
サブセレクトが結果セットを返す間、単一の値が期待されるため、これは機能しません。
実行できるアプローチは 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
ます。
どちらを使用するのが適切か (該当するすべてのフィールドがインデックス化されていると仮定) は、各テーブルで予想される行数とデータのカーディナリティに依存する可能性があります。ユースケースにとってどちらがより効率的かを確認するために、自分自身をテストすることをお勧めします。