首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL Find_In_Set语句帮助

问MySQL Find_In_Set语句帮助
EN

Stack Overflow用户
提问于 2021-07-17 23:39:46
回答 1查看 14关注 0票数 0

我的Select查询中有以下MySQL代码

代码语言:javascript
复制
FIND_IN_SET(`Final Total`, (
SELECT GROUP_CONCAT( DISTINCT `Final Total`
ORDER BY `Final Total` ASC ) FROM `Dressage scores`)) AS `Final Rank`,

我正在尝试找出一种方法,如果代码在Final Rank字段中看到该记录的W或E,但在表中的所有其他记录上执行,则停止执行该代码。

所以我试着用这样的东西来测试

代码语言:javascript
复制
IF (`Final Rank` == "E") THEN FIND_IN_SET(`Final Total`, (
SELECT GROUP_CONCAT( DISTINCT `Final Total`
ORDER BY `Final Total` ASC ) FROM `Dressage scores`)) AS `Final Rank`,

我也尝试过这样的东西

代码语言:javascript
复制
FIND_IN_SET(`Final Total`, (
SELECT GROUP_CONCAT( DISTINCT `Final Total`
ORDER BY `Final Total` ASC ) FROM `Dressage scores`)) AS `Final Rank` WHERE `Final Rank` <> "E",

但我显然需要一些帮助。

这是针对竞赛评分系统的,因此如果某个记录退出(W)或被淘汰( E ),我希望能够手动在Final Rank字段中插入W或E,然后让系统仅对不包含W或E的记录进行排名。

有人能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2021-07-18 01:39:04

让我们通过以下方式加快速度

代码语言:javascript
复制
EXISTS( SELECT 1 FROM `Dressage scores`
            WHERE `Final Total` = `outer table`.`Final Total` )

我对你的“最终排名”测试很困惑。也许:

代码语言:javascript
复制
IF (FIND_IN_SET(`Final Rank`, "E,W"),
    false,
    EXISTS( SELECT 1 FROM `Dressage scores`
            WHERE `Final Total` = `outer table`.`Final Total` )
   )

请注意,MySQL使用=,而不是==。

显然,您希望从表达式中返回true/false值?这就是你的表达式正在做的,我的也是。

EXISTS( SELECT 1 ...)很快,因为它在找到匹配项时停止为TRUE --无需扫描整个表或构建临时表。ORDER BY和DISTINCT是额外的、不必要的工作。

EXISTS返回true/false。

IF(boolean-test, value if true, value if false) --我的示例中的两个值都是true/false。

我很确定IF()是“短路”的。另一种可能的短路:

代码语言:javascript
复制
NOT FIND_IN_SET(`Final Rank`, "E,W")
 OR EXISTS( SELECT 1 FROM `Dressage scores`
            WHERE `Final Total` = `outer table`.`Final Total` )

为了进一步讨论,请提供数据的一小部分案例,以及每个案例所需的真/假。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68425584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档