2

如何使用删除和选择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

这不起作用,因为=在子选择返回结果集时需要​​单个值。

您可以采用两种方法,可以使用IN()子句,也可以通过连接删除。

第一个看起来像这样:

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

请注意,在子选择中只应指定一个字段。我假设这furniture.iditems.base_item这种情况有关。如果furniture.type确实是匹配字段,请在子选择中使用它。

第二种方法如下所示:

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

我的假设再次items.base_itemfurniture.id.

哪个更好用(假设所有适用的字段都已编入索引)可能取决于每个表中预期的行数和数据的基数。您可能想测试自己,看看哪个对您的用例更有效。

于 2013-10-07T19:28:57.720 回答
2

您的SELECT语句返回一个包含两列的集合(或记录)。您需要使用IN(not =) 并且只有SELECT一列

delete from items T1 where T1.base_item in (
   SELECT T2.id From furniture T2 where T2.type = 'i' 
); 
于 2013-10-07T19:25:24.343 回答
1

这是你想要做的吗?您可以使用连接来删除您想要的项目

DELETE T1
FROM items T1 
INNER JOIN furniture T2 ON T1.base_item = T2.id
WHERE T2.type = 'i'
于 2013-10-07T19:25:18.010 回答