2013-06-07 1 views
0

Я получаю ошибку ниже для второго запроса внизу. Любая идея идеи почему?Указание одной и той же таблицы в подзапросе в главном сообщении UPDATE

Благодаря

ОШИБКА: Номер Ошибка: 1093

You can't specify target table 'menus' for update in FROM clause 

РАБОТЫ:

INSERT INTO menus 
(name, controller, parent) 
VALUES 
('A', 'B', (SELECT id FROM menus menus_alias WHERE SHA1(menus_alias.id) = '1')) 

ОБА НЕ РАБОТАЮТ:

UPDATE menus SET 
parent = (SELECT id FROM menus menus_alias WHERE SHA1(menus_alias.id) = '1') 
WHERE SHA1(id) = '5' 

UPDATE menus menus_alias SET 
menus_alias.parent = (SELECT id FROM menus WHERE SHA1(id) = '1') 
WHERE SHA1(menus_alias.id) = '5' 

Проверенный эти:

и некоторые другие

ответ

3

Использование JOIN

UPDATE menus m1 JOIN menus m2 
    ON SHA1(m1.id) = '5' AND SHA1(m2.id) = '1' 
    SET m1.parent = m2.id 
+0

+1 очень хорошая идея :) – Stephan

+0

Точно то, что я хотел. Спасибо. – BentCoder

0

Попробуйте обходной путь (оба запроса должен быть Exec в том же сеансе MySQL):

SELECT 
    id INTO @za_id 
FROM 
    menus 
WHERE 
    SHA1(id) = '1'; 

UPDATE menus 
    SET parent = @za_id 
WHERE 
    SHA1(id) = '5'; 

Также вы пытаетесь обновить таблицу со значениями из тех же таблиц, и так как MySQL не знает, что данные выбраны из разных записей, тогда записи, которые необходимо обновить, вызывают ошибку.

+0

Я хотел сделать в одном запросе, но если это невозможно, мне придется использовать два в любом случае. Давайте посмотрим, возможно ли это в глазах других. Спасибо – BentCoder

1

Вы можете попробовать это

UPDATE menus SET 
parent =(
    SELECT id FROM (
     SELECT id FROM menus 
    ) AS x 
    WHERE SHA1(id) = '1' 
) 
WHERE SHA1(menus_alias.id) = '5' 
Смежные вопросы