如何使用删除并选择mysql删除行
我使用此行不起作用:
delete from items T1 where T1.base_item =
(SELECT T2.type,T2.id From furniture T2 where T2.type = 'i' );
这
不起作用,因为=
需要单个值,而子选择返回结果集。
可以采用两种方法,可以使用IN()
子句,也可以跨联接删除。
第一个看起来像这样:
DELETE FROM items
WHERE base_item IN (SELECT id FROM furniture WHERE type = 'i')
请注意,在子选择中只应指定单个字段。 我假设在这种情况下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
有关。
哪个更好用(假设所有适用的字段都已编制索引)可能取决于每个表中预期的行数和数据基数。 您可能想测试自己,看看哪个对您的用例更有效。
您的SELECT
语句返回一个包含两列的集合(或记录)。您需要使用IN
(而不是=
)并且仅SELECT
一列
delete from items T1 where T1.base_item in (
SELECT T2.id From furniture T2 where T2.type = 'i'
);
这是你想做的吗? 您可以使用联接删除所需的项目
DELETE T1
FROM items T1
INNER JOIN furniture T2 ON T1.base_item = T2.id
WHERE T2.type = 'i'