如何使用delete删除行并选择mysql
我使用这些行不起作用:
delete from items T1 where T1.base_item =
(SELECT T2.type,T2.id From furniture T2 where T2.type = 'i' );
答案 0 :(得分:3)
这不起作用,因为=
在subselect返回结果集时需要单个值。
您可以采取两种方法,可以使用IN()
子句,也可以在联接中删除。
第一个看起来像这样:
DELETE FROM items
WHERE base_item IN (SELECT id FROM furniture WHERE type = 'i')
请注意,在subselect中只应指定一个字段。我假设在这种情况下furniture.id
与items.base_item
有关。如果furniture.type
确实是匹配字段,请在子选择中使用该字段。
第二种方法如下:
DELETE items
FROM items INNER JOIN furniture
ON items.base_item = furniture.id
WHERE furniture.type = 'i'
我的假设是items.base_item
与furniture.id
相关。
哪个更好(假设所有适用的字段都已编入索引)可能取决于每个表中预期的行数和数据的基数。您可能想要测试自己,看看哪个更有效用于您的用例。
答案 1 :(得分:2)
您的SELECT
语句正在返回包含两列的一组(或记录)。您需要使用IN
(不是=
)而只需SELECT
一列
delete from items T1 where T1.base_item in (
SELECT T2.id From furniture T2 where T2.type = 'i'
);
答案 2 :(得分:1)
这是你想要做的吗?您可以使用联接删除所需的项目
DELETE T1
FROM items T1
INNER JOIN furniture T2 ON T1.base_item = T2.id
WHERE T2.type = 'i'