gpt4 book ai didi

mysql - MySQL 中的 COALESCE 中的 SELECT

转载 作者:可可西里 更新时间:2023-11-01 06:58:51 30 4
gpt4 key购买 nike

我正在尝试在 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 个。你只能得到一个。

你可以试试:

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 - MySQL 中的 COALESCE 中的 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15637878/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com