使用选择的 mysql 删除


Delete with select mysql

如何使用删除并选择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.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有关。

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

您的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'