子查询返回1行以上的更新

Tom*_*now 0 mysql sql database

我一直在努力解决这个问题好几个小时都没有用。我一直在看许多与子查询返回不止一行有关的stackoverflow.com问题,但未能找到对我的情况有帮助的子查询。

我有两个表:客户职位。我试图更新positions.client_idclients.id WHERE clients.file_name = positions.file_name

基本上,我有一个需要分配给客户的职位清单。每个客户都有多个职位,但每个职位都恰好分配给一个客户。换句话说,client_id位置上不是唯一的,但是idclient中是唯一的(主键)。

这是我一直在尝试的不同变体形式:

UPDATE positions 
SET client_id = (SELECT clients.id 
FROM clients 
WHERE clients.file_name = positions.file_name)
Run Code Online (Sandbox Code Playgroud)

它返回。

1242-子查询返回多于1行

在此先感谢您的帮助!

Dan*_* Li 6

使用LIMIT子句。这会将结果数量限制为一行。

UPDATE positions 
SET client_id =
    (
     SELECT clients.id 
     FROM clients 
     WHERE clients.file_name = positions.file_name
     LIMIT 1
    )
Run Code Online (Sandbox Code Playgroud)

请记住,最佳实践通常是不要使用子查询来实现SQL所需的功能。

  • @Tomanow它可能已经起作用,但是如何确定返回的第一行是正确的行呢? (2认同)