0

对于底部的第二个查询,我在下面收到错误。知道为什么吗?

谢谢

错误: 错误号: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'

检查了这些:

和其他一些

4

3 回答 3

3

Use JOIN

UPDATE menus m1 JOIN menus m2
    ON SHA1(m1.id) = '5' AND SHA1(m2.id) = '1'
   SET m1.parent = m2.id
于 2013-06-07T11:50:46.623 回答
1

你可以试试这个

UPDATE menus SET
parent =(
    SELECT id FROM (
        SELECT id FROM menus
    ) AS x 
    WHERE SHA1(id) = '1'
)
WHERE SHA1(menus_alias.id) = '5'
于 2013-06-07T11:44:10.980 回答
0

试试这个解决方法(两个查询必须在同一个 mysql 会话中执行):

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

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

此外,您正在尝试使用同一表中的值更新表,并且由于 mysql 不知道所选数据来自不同的记录,因此应该更新的记录会引发错误。

于 2013-06-07T11:37:51.167 回答