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 に答える