子查询返回超过1行的更新

时间:2013-01-31 17:39:40

标签: mysql sql database

我一直在努力解决这个问题几个小时无济于事。我一直在查看许多与子查询相关的stackoverflow.com问题,这些子查询返回多行,但是找不到一个对我有帮助的问题。

我有两个表:客户职位。我正在尝试使用 clients.id 更新 positions.client_id WHERE clients.file_name = positions.file_name

基本上我有一份需要分配给客户的职位列表。每个客户都有多个职位,但每个职位都分配给一个客户。换句话说, client_id 位置中不是唯一的,但 ID 客户端中是唯一的(主键)。

以下是我一直在尝试不同的变体:

UPDATE positions 
SET client_id = (SELECT clients.id 
FROM clients 
WHERE clients.file_name = positions.file_name)

它返回。

  

1242 - 子查询返回超过1行

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

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

UPDATE positions 
SET client_id =
    (
     SELECT clients.id 
     FROM clients 
     WHERE clients.file_name = positions.file_name
     LIMIT 1
    )

请记住,最佳做法通常是不使用子查询来实现SQL中的所需。

答案 1 :(得分:1)

如果您有多个行,则可以像这样使用

UPDATE table1 a JOIN table2 b 
ON a.field1 = b.field1 
SET 
a.field2 = b.field2,
a.field3 = b.field3,
a.field4 = b.field4

另一种方式

UPDATE table1 a JOIN table2 b 
ON a.field1 = b.field1 
SET 
a.field2 = b.field2,
a.field3 = b.field3,
a.field4 = b.field4

答案 2 :(得分:0)

这意味着,有超过1行符合条件clients.file_name = positions.file_name

使用limit