2

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

[编辑] 更正查询

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

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

4

3 回答 3

2
DELETE store
FROM store
JOIN storeInfo 
    ON storeInfo.store_id = store.id
WHERE storeInfo.type = 17
于 2012-11-20T19:58:23.020 回答
2

在对问题进行错字更新后 - 您不需要JOIN在子查询中使用 a 。您可以storeInfo.store_idIN()子查询中返回。

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

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

如果您需要从这两个表中删除(例如,当storeInfo从 中删除父级时,行成为孤立行store),请改用以下JOIN语法:

DELETE
  /* Syntax to delete rows from both tables */
  store, storeInfo
FROM 
  store JOIN storeInfo ON store.id = storeInfo.store_id
WHERE storeInfo.type = 17

查看MySQLDELETE语法参考以获取完整的详细信息。

于 2012-11-20T20:00:14.263 回答
0

你可以直接加入delete

delete store from store 
  JOIN storeInfo ON storeInfo.store_id = store.id 
  WHERE  store.type = 17;
于 2012-11-20T20:07:34.453 回答