MySQL ошибка запроса - PullRequest
       30

MySQL ошибка запроса

0 голосов
/ 08 сентября 2011

У меня проблема с запросом 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    |
+--------+-------------------+-----------+-----------------------------------+

удаляю меню запросов с идентификатором 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

как мне удалить данные из таблицы, которые они вернули в select?

1 Ответ

1 голос
/ 08 сентября 2011

К сожалению, MySQL не поддерживает SELECT в операторах UPDATE или DELETE из тех же таблиц. http://dev.mysql.com/doc/refman/5.6/en/delete.html "В настоящее время вы не можете удалить из таблицы и выбрать из этой же таблицы в подзапросе."

Итак, для этого вам нужно использовать соединения.

...