用select mysql删除

时间:2013-10-07 19:20:05

标签: php mysql sql

如何使用delete删除行并选择mysql

我使用这些行不起作用:

delete from items T1 where T1.base_item = 
(SELECT T2.type,T2.id From furniture T2 where T2.type = 'i' );

3 个答案:

答案 0 :(得分:3)

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

您可以采取两种方法,可以使用IN()子句,也可以在联接中删除。

第一个看起来像这样:

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

请注意,在subselect中只应指定一个字段。我假设在这种情况下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相关。

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

答案 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'