0

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

我有两张桌子:客户职位。我正在尝试使用clients.id WHERE clients.file_name = position.file_name更新position.client_id

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

这是我一直在尝试不同的变化:

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

它返回。

1242 - 子查询返回多于 1 行

提前感谢您的帮助!

4

2 回答 2

5

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

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

请记住,最佳实践通常是不使用子查询来实现您想要的 SQL。

于 2013-01-31T17:40:35.007 回答
2

如果你有多行,你可以像这样使用

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
于 2016-07-07T16:04:17.410 回答