gpt4 book ai didi

mysql - MySQL 短路 IF() 函数吗?

转载 作者:可可西里 更新时间:2023-11-01 07:01:45 33 4
gpt4 key购买 nike

我需要从第二个表中查询数据,但前提是满足主表中的一组罕见条件:

SELECT ..., IF(a AND b AND c AND (SELECT 1 FROM tableb ...)) FROM tablea ...

a、b 和 c 条件几乎总是错误的,所以我的想法是子查询永远不会对结果集中的大多数行执行,因此比连接快得多。但只有当 IF() 语句短路时才会如此。

是吗?

感谢你们提供的任何帮助。

最佳答案

答案是肯定的。
mysql 查询中的 IF(cond,expr_true,expr_false) 短路。

这里做个测试,用@variables来证明事实:

SET @var:=5;  
SELECT IF(1 = 0, (@var:=@var + 1), @var ); -- using ':=' operator to modify 'true' expr @var
SELECT IF(1 = 1, @var, (@var:=@var + 1) ); -- using ':=' operator to modify 'false' expr @var
SELECT @var;

所有三个 SELECT 查询的结果都是“5”。

如果 IF() 函数没有短路,结果将是来自 SELECT #1 的“5”,来自 SELECT #2 的“6”,以及来自最后一个“select @var”的“7”。

这是因为在选择 #1 中永远不会执行 'true' 表达式,也不会为选择 #2 执行 false 表达式。

请注意,':=' 运算符用于在 SQL 查询(select、from 和 where 子句)中修改 @var。您可以从中获得一些非常奇特/复杂的 SQL。我使用 @vars 在 SQL 查询中应用“过程”逻辑。

-- 乔根森 --

关于mysql - MySQL 短路 IF() 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3713090/

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