gpt4 book ai didi

mysql - 返回可变行数时,如何在 MySQL 中编写 if else-if else 查询

转载 作者:可可西里 更新时间:2023-11-01 06:54:05 25 4
gpt4 key购买 nike

我在一个表中有三列:

score  status  No.
1, 2, 1
0, 1, 2
0, 0, 1

我需要这个来编写 C# 风格的伪 SQL:

rows = empty;

rows = "SELECT * FROM `table` WHERE score = 1"
if (rows.Count > 0) //at least one row
return rows;

rows = "SELECT * FROM `table` WHERE status = 2"
if (rows.Count > 1) //more than one row
return row with MAX(No.) from rows; //ie MAX(No.) where status = 2

return rows;

我希望我能说清楚。简而言之,从我的表中选择score = 1的记录,如果没有这样的记录,则返回status = 2的记录,如果有多个status = 2的记录,则返回具有最大值的记录对于状态 = 2 的编号(如果根本没有状态 = 2 的记录,则返回空)。

如何在一个查询中写入它?这对我来说应该是一个很好的学习经历。否则我知道分解成更小的查询并运行每个查询。而且我现在不能使用存储过程..

编辑: 实际上,我的查询将有更多的 WHERE 子句,但在两个条件上都相同,这就是我省略它的原因。所以对于第一个条件,暂时只会返回一条记录。即 SELECT * FROM table WHERE score = 1 现在将只返回一行。 我需要/我会接受答案也提供了这样的解决方案。但重点是您永远不知道,将来可能会发生一些设计更改,score = 1 可能会有更多行。这就是为什么我选择记录而不是记录。但理想情况下,业务逻辑是让所有记录都具有 score = 1。现在,记录就可以了。我只是在想,如果只返回一行,查询会简单得多,我的队友可以很容易地理解代码。

最后更新:谢谢大家,你们一直都很好 :) 许多答案都很有效,选择一个真的让人望而生畏。我对答案的发现:

  1. 始终有效的答案:@GordonLinoff's , @ZaneBiens's , @ZaneBien's another , @Scen's , @JulienCh.'s (最后 3 个基本相同,但我还不完全了解它们是如何工作的:))

  2. 仅当第一个条件 score = 1 仅返回一行时才有效的答案:@HannoBinder's , @ShlomiNoach's , @DaniellePaquette-Harvey's .目前,我会坚持使用@Danielle 的(这非常简单),如果出现需要不止一行的情况,我会稍后恢复)

  3. 其余的答案,我无法测试,因为它们要么不是很具体,要么与 MySQL 无关。

  4. @MatthewPK's在上下文中不合适。

授予赏金和接受答案非常困难,因为有这么多正确答案。我选择了this one因为我觉得它可能更有效率和可读性,但我会接受@Scen 的 answer因为非常简单。

最佳答案

这看起来很难,因为在这两种情况下您返回的行数是可变的。

以下查询组合了所有可能的行,然后检查是否存在第一个类型以查看应返回哪种类型。

select *
from ((SELECT 'SCORE' as matchtype, t.*
FROM `table` t
WHERE score = 1
) union all
(SELECT 'STATUS' as matchtype, t.*
FROM `table` t join
(select max(`No.`) as maxno
from `table`
WHERE status = 2
) tsum
on t.`No.` = tsum.maxno
WHERE status = 2
)
) t cross join
(select count(*) as cnt
from `table`
where score = 1
) const
where matchtype = (case when const.cnt > 0 then 'SCORE' else 'STATUS' end)

注意:返回集包括 MatchType。要摆脱这种情况,您需要包含所需列的完整列表。

关于mysql - 返回可变行数时,如何在 MySQL 中编写 if else-if else 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7680004/

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