在where-in子句中进行子选择

时间:2012-11-20 19:55:22

标签: mysql

尝试删除单个语句中的子选择生成的id列表。这可能吗?我一直在尝试以下方法:

[edit]更正后的查询

DELETE from store 
WHERE  id in ( SELECT store.id 
               FROM   storeInfo 
               JOIN   store ON storeInfo.store_id = store.id
               WHERE  storeInfo.type = 17 )

但这是不正确的语法......不确定如何正确构建它。

3 个答案:

答案 0 :(得分:2)

DELETE store
FROM store
JOIN storeInfo 
    ON storeInfo.store_id = store.id
WHERE storeInfo.type = 17

答案 1 :(得分:2)

在错误更新问题后 - 您在子查询中不需要JOIN。您只需从storeInfo.store_id子查询中返回IN()

DELETE FROM `store` WHERE `id` IN (SELECT `store_id` FROM `storeInfo` WHERE `type` = 17)

MySQL不允许您在子查询中使用表store,然后从中删除行。但是,您可以使用storeInfo,因为它直接加入store_id

如果您需要从这些表的两个中删除(例如storeInfo中的行在父项从store中删除时成为孤立的行),请使用{代之以{1}}语法:

JOIN

查看MySQL DELETE syntax reference以获取完整详情。

答案 2 :(得分:0)

您可以直接加入delete

delete store from store 
  JOIN storeInfo ON storeInfo.store_id = store.id 
  WHERE  store.type = 17;