问题描述
你好,
我有这样的sql:
问题是,如果case语句中的所有3个子查询都将被执行,或者只有一个满足condtition?
从我在执行计划中看到的内容来看,似乎所有3个子查询都将被执行。
我有这样的sql:
SELECT CASE a.x
WHEN 'b' THEN (SELECT b.y FROM b WHERE b.id = a.b_id)
WHEN 'c' THEN (SELECT c.y FROM c WHERE c.id = a.c_id)
WHEN 'd' THEN (SELECT d.y FROM d WHERE d.id = a.d_id)
END
FROM a
问题是,如果case语句中的所有3个子查询都将被执行,或者只有一个满足condtition?
从我在执行计划中看到的内容来看,似乎所有3个子查询都将被执行。
专家解答
很容易证明我们不会全部运行它们,例如
没有零除法错误。
SQL> create table a ( x char(1));
Table created.
SQL> insert into a values ('b');
1 row created.
SQL>
SQL> create table b ( y int );
Table created.
SQL> insert into b values (1);
1 row created.
SQL>
SQL> SELECT CASE a.x
2 WHEN 'b' THEN (SELECT b.y FROM b )
3 WHEN 'c' THEN (SELECT y/0 FROM b )
4 WHEN 'd' THEN (SELECT y/0 FROM b )
5 END
6 FROM a;
CASEA.XWHEN'B'THEN(SELECTB.YFROMB)WHEN'C'THEN(SELECTY/0FROMB)WHEN'D'THEN(SELECTY/0FROMB)END
-------------------------------------------------------------------------------------------
1
1 row selected.
没有零除法错误。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




