在MySQL的COALESCE中选择

前端之家收集整理的这篇文章主要介绍了在MySQL的COALESCE中选择前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试在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);

这对我来说听起来很有效.我正在尝试使用最合适的值更新列.如果我能找到符合3个标准的记录 – >这是我需要的那个.另外一个适合2个标准,否则记录只匹配一个标准.

我可以在3个更新查询中执行此操作,但我不明白为什么这不起作用.根据manual

COALESCE返回列表中的第一个非NULL值,如果没有非NULL值,则返回NULL.

这正是我需要的.但它给出以下错误

错误代码:1064.您的sql语法有错误;查看与您的MysqL服务器版本对应的手册,以便在“SELECT”附近使用正确的语法

我在这里错过了什么吗?

最佳答案
您的问题可能是您获得的子选择返回的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
        );

但是,您的特定语法错误是您需要围绕选择括号.所以这是语法上正确的版本:

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));

猜你在找的MySQL相关文章