使用循环引用更新MYSQL表值

时间:2014-05-08 16:49:17

标签: mysql sql sql-update circular-reference

我有两张桌子:

AGENT
--------
agent_id
user_id
...

USER
-----
user_id
agent_id
user_name
...

我不在此讨论为什么会这样做,但我有一个问题,如果我只知道USER.user_name值(总是唯一的),就能将USER.AGENT_ID更新为正确的值。

我试过了:

update USER U set U.agent_id = 
  (select A.agent_id from agent A where A.user_id = 
     (select tu.user_id from user tu where tu.user_name = 'myusername')
  )
where U.user_name = 'myusername';

然而,这不起作用并且给我错误。我该怎么做?

1 个答案:

答案 0 :(得分:0)

MySQL不允许您在SELECT中更新的同一个表中使用UPDATE,但您可以使用JOIN进行多表更新:

UPDATE USER u JOIN AGENT A ON A.user_id = u.user_id
SET U.agent_id = A.agent_id
WHERE u.user_name = 'myusername';

此外,正如您所做的那样使用子查询可能会抱怨它无法保证子查询会返回单个标量值,因为您选择的是基于搜索非唯一列。