mysql - 子查询通过更新返回多于 1 行

标签 mysql sql database

我已经为这个问题苦苦思索了几个小时,但无济于事。我一直在查看 stackoverflow.com 上与返回多行的子查询相关的许多问题,但未能找到对我的情况有帮助的问题。

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

基本上我有一个需要分配给客户的职位列表。每个客户都有多个职位,但每个职位都分配给一个客户。也就是说,client_idpositions中不是唯一的,但是idclients中是唯一的(主键)。

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

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

它返回。

1242 - Subquery returns more than 1 row

在此先感谢您的帮助!

最佳答案

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

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

请记住,最佳做法通常是不使用子查询来实现您在 SQL 中想要的结果。

关于mysql - 子查询通过更新返回多于 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631814/

相关文章:

sql - 计算不同值并通过聚合消除 Null 值

ios - SQLite DateTime 列接受任何值......正常吗?

java - Spring mvc - jsp MySQLSyntaxErrorException

java - 使用正则表达式将 WKT 转换为 GeoJSON

php - 需要加速 MySQL 查询,只有 4,000 条记录,需要 3 秒以上,有 3 个连接

mysql - 如何在数据库更新查询中使用FOR或WHILE?

java - 有人可以帮我理解以下与hibernate中的继承策略相关的逻辑吗?

mysql - SQL 连接难题

mysql - 在 MySQL 中选择随机最大值

sql - Listagg 两列 + 当共享相同值时将它们分组