sqlite3 update error sub select返回2列-应为1

amrnrhlw  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(444)

我正在更新电话号码表中的一个标志
isbest:必须是移动的,优先级应最接近0
cpf是外键,所以一个id可以有多个电话,但只有一个会收到isbest标志

UPDATE telefone SET isbest = 1 WHERE fullnumber in  (SELECT fullnumber,min(priority)
                    FROM telefone
                    WHERE phonetype = "MOBILE"
                    GROUP BY telefone.cpf
                    )

但我有个错误:
sub select返回2列-应为1
我把密码改成

UPDATE telefone SET isbest = 1 WHERE fullnumber in (SELECT fullnumber
                    FROM telefone
                    WHERE phonetype = "MOBILE"
                    GROUP BY telefone.cpf
                    ORDER BY priority asc
                    )

但是它更新的数字比预期的多(但是单独运行时的子查询显示正确的行)
在第一个代码中,我尝试添加另一个子查询(从(…)中选择fullnumber),但也没有帮助(同样,子查询本身看起来是正确的)
我将sqlite3与sqlitestudio一起使用
热释光;dr代码运行时,at影响的行数比预期的多,但只有子查询看起来是正确的

flvlnr44

flvlnr441#

使用 = 而不是 IN 并确保相关子查询仅返回1行:

UPDATE telefone 
SET isbest = 1 
WHERE phonetype = 'MOBILE'
AND fullnumber = (
  SELECT t.fullnumber
  FROM telefone AS t
  WHERE t.cpf = telefone.cpf AND t.phonetype = telefone.phonetype
  ORDER BY t.priority LIMIT 1
)

相关问题