我一直在努力解决这个问题几个小时无济于事。我一直在查看许多与子查询相关的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行
提前感谢您的帮助!
答案 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