如何使用删除和选择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
(not =
) 并且只有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'