gpt4 book ai didi

mysql - 使用 CASE/WHEN 编写 MySQL 过程时遇到问题

转载 作者:行者123 更新时间:2023-11-29 13:56:28 24 4
gpt4 key购买 nike

我正在尝试编写一个过程,该过程将返回所有行的子集或仅根据输入返回所有行。我现在正在使用一些代码(粘贴在下面)。在此代码中,我手动设置 var1var2(这些最终将被传递参数)并查询给定的值。

现在,代码返回满足约束 userDataTypeName="currentGPA"userDataText="4," 的行,但如果这些值中的任何一个为 NULL,则代码将返回没有行。如果 userDataText=NULL 的值而不是无,我希望返回表中的所有行。我想也许 COALESCE 可以帮助我实现这一目标,但我不确定。

关于如何实现这一目标有什么想法吗?

BEGIN
DECLARE var1 varchar(20);
DECLARE var2 varchar(20);
SET var1 = "currentGPA";
SET var2 = "4";
SELECT udata.user_id FROM userdata udata
WHERE(
COALESCE(udata.userDataTypeName, '') =
CASE
WHEN var1 IS NULL THEN ''
ELSE var1
END
and
COALESCE(udata.userDataText, '') = COALESCE(var2, '')) LIMIT 30;
END

最佳答案

那个 CASE 似乎等于 COALESCE(var1,'')。

现在的查询,您正在将 COALESCE 应用于表中的每一行。这是相当低效的,最好将每行中的值与所需值进行比较。在本例中,所需值为 NULL 或 var1/var2。这给出了以下查询,它可以更有效地按照您的意愿进行(基于OP +以下注释的查询)

SELECT udata.user_id 
FROM userdata udata
WHERE udata.userDataTypeName = COALESCE(var1,'')
AND (
var2 IS NULL
OR
udata.userDataText = var2
)
LIMIT 30;

关于mysql - 使用 CASE/WHEN 编写 MySQL 过程时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15782248/

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