我正在尝试在MySQL中执行以下操作:
UPDATE
x
SET
y = COALESCE(SELECT z FROM table WHERE a = b AND c = d AND e = f LIMIT 1,
SELECT z FROM table WHERE a = b AND c = d LIMIT 1,
SELECT z FROM table WHERE a = b LIMIT 1);
Run Code Online (Sandbox Code Playgroud)
这对我来说听起来很有效.我正在尝试使用最合适的值更新列.如果我能找到符合3个标准的记录 - >那就是我需要的记录.另外一个适合2个标准,否则记录只匹配一个标准.
我可以在3个更新查询中执行此操作,但我不明白为什么这不起作用.根据手册:
COALESCE returns the first non-NULL value in the list, or NULL if there are no non-NULL values.
这正是我需要的.但它给出以下错误:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT'
我在这里错过了什么吗?
Gor*_*off 10
您的问题可能是您获得的子选择返回的z值超过1 z.你只能得到一个.
你可以尝试:
update x
set y = (select z from t where a = b
order by (case when a = b and c = d and e = f then 1
when a = b and c = d then 2
else 3
end)
limit 1
);
Run Code Online (Sandbox Code Playgroud)
但是,您的特定语法错误是您需要围绕选择括号.所以这是语法上正确的版本:
UPDATE
x
SET
y = COALESCE((SELECT z FROM table WHERE a = b AND c = d AND e = f LIMIT 1),
(SELECT z FROM table WHERE a = b AND c = d LIMIT 1),
(SELECT z FROM table WHERE a = b LIMIT 1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5852 次 |
| 最近记录: |