0

我有一个sql查询的问题如下,我需要删除一些数据,但是引用了这些记录的父母和孩子,例如:

mysql> select * from menu;
+--------+-------------------+-----------+-----------------------------------+
| menuId | menuNome          | menuIdPai | menuLink                          |
+--------+-------------------+-----------+-----------------------------------+
|      1 | A Empresa         |         0 | empresa.php                       |
|      2 | Sobre Nós         |         1 | sobre.php                         |
|      3 | Objetivos         |         1 | objetivos.php                     |
|      4 | Contato           |         0 | contato.php                       |
|      5 | Produtos          |         0 | produtos.php                      |
|      6 | Informática       |         5 | categoria.php?cat=informatica     |
|      7 | Missão da Empresa |         2 | missao.php                        |
|      8 | Visão da Empresa  |         2 | visao.php                         |
|      9 | Televisão         |         5 | categoria.php?cat=televisao       |
|     10 | Computadores      |         6 | subcategoria.php?sub=computadores |
|     11 | Monitores         |         6 | subcategoria.php?sub=monitores    |
+--------+-------------------+-----------+-----------------------------------+

如果我做一个正常的选择,我会删除 ID 为 5 的查询菜单以及他们的所有孩子和他们的亲戚,你要删除的数据,我通常是结果,请参阅:

mysql> select * from menu where menuId = 5 or menuIdPai in( ( select menuId from menu where menuIdPai = 5 or menuId = 5 ) );
+--------+--------------+-----------+-----------------------------------+
| menuId | menuNome     | menuIdPai | menuLink                          |
+--------+--------------+-----------+-----------------------------------+
|      5 | Produtos     |         0 | produtos.php                      |
|      6 | Informática  |         5 | categoria.php?cat=informatica     |
|      9 | Televisão    |         5 | categoria.php?cat=televisao       |
|     10 | Computadores |         6 | subcategoria.php?sub=computadores |
|     11 | Monitores    |         6 | subcategoria.php?sub=monitores    |
+--------+--------------+-----------+-----------------------------------+
5 rows in set (0.00 sec)

但是当我删除时:

mysql> delete from menu where menuId = 5 or menuIdPai in( ( select menuId from menu where menuIdPai = 5 or menuId = 5 ) );
ERROR 1093 (HY000): You can't specify target table 'menu' for update in FROM clause

如何从表中删除数据,它们在选择中返回?

4

1 回答 1

1

不幸的是,MySQL 不支持在同一表中的 UPDATE 或 DELETE 语句中进行 SELECT。http://dev.mysql.com/doc/refman/5.6/en/delete.html “目前,您不能从表中删除并在子查询中从同一个表中选择。”

因此,您将不得不使用连接来执行此操作。

于 2011-09-08T17:34:37.177 回答