我正在尝试更新下表中的列' jobqueue'使用在' mdtinfo'上执行的SELECT查询的结果表
我想要更新的列名为ignore,我需要将值从默认值0设置为1.
update jobqueue
set jobqueue.`ignore`= '1'
where (SELECT JobQueue_job_queue_id
FROM mdtinfo
WHERE product_name = 'Example')
上述查询返回以下错误:SQL错误(1242):子查询返回多于1行。
当运行select查询时,它会成功返回结果。
答案 0 :(得分:1)
在MySQL中,WHERE
子句中出现的值为零意味着错误。
因此,UPDATE something SET col=val WHERE (SELECT colx FROM sometable)
有可能成为有效的查询。如果内部SELECT
只获得一行,并且其colx
列的值为0,则更新将不会执行任何操作。如果colx
列的值非零,则查询表示UPDATE something SET col=val WHERE true
。因此, sometable
中的每一行都会更新。我怀疑这是你想要的。
如果内部SELECT
碰巧返回多行,则查询无效。您将收到实际收到的错误1242。
(将数字解释为布尔值的业务导致MySQL接受一些其他狡猾的查询语法,如问题中的语法。)
我想您要检索实际要更新的行的job_queue_id
值。所以尝试这样的事情。
update jobqueue
set jobqueue.`ignore`= '1'
where jobqueue.job_queue_id IN (SELECT JobQueue_job_queue_id
FROM mdtinfo
WHERE product_name = 'Example')
我猜你有一个专栏jobqueue.job_queue_id
。您没有告诉我们您在jobqueue
中有哪些列。
答案 1 :(得分:0)
update jobqueue
set jobqueue.`ignore`= '1'
where jobqueue.`job_queue_id` IN (SELECT GROUP_CONCAT(JobQueue_job_queue_id)
FROM mdtinfo
WHERE product_name = 'Example' GROUP BY product_name)
你应该在where condition中写下列名。