gpt4 book ai didi

sql - 使CASE-WHEN-子句发出一个元组

转载 作者:行者123 更新时间:2023-12-03 19:45:22 27 4
gpt4 key购买 nike

我有以下查询:

SELECT
m1.ID,
(CASE WHEN <condition> THEN
<expr1.1>
ELSE
<expr1.2>
END) as [Tag1],
(CASE WHEN <condition> THEN
<expr2.1>
ELSE
<expr2.2>
END) as [Tag2],
(CASE WHEN <condition> THEN
<expr3.1>
ELSE
<expr3.2>
END) as [Tag3],
FROM MyTable AS m1
LEFT OUTER JOIN MyOtherTable m2
ON m2.ID = m1.ID


如您所见,我有3次相同的条件,但是每个分支中的表达式不同。在这种情况下,SQL是否可以只编写一次条件并发出三元组?还是可以通过其他任何方式防止多次写入相同条件?

我想在Sqlite3中使用它。

最佳答案

遗憾的是(afaik)SQLite没有通用的表表达式,但是您可以在子查询中计算该表达式并在其上使用CASE。

它不会消除任何case表达式,但是可以简化每个case表达式,只需要一次更改即可;

例如,查询;

SELECT CASE WHEN sel=1 OR sel=3 AND a<>2 OR sel=2 AND a<>3 OR sel=4 THEN a ELSE b END e,
CASE WHEN sel=1 OR sel=3 AND a<>2 OR sel=2 AND a<>3 OR sel=4 THEN b ELSE c END f,
CASE WHEN sel=1 OR sel=3 AND a<>2 OR sel=2 AND a<>3 OR sel=4 THEN c ELSE a END g
FROM olle;


...可以改写为...

SELECT CASE WHEN exp THEN a ELSE b END e,
CASE WHEN exp THEN b ELSE c END f,
CASE WHEN exp THEN c ELSE a END g
FROM (SELECT *, sel=1 OR sel=3 AND a<>2 OR sel=2 AND a<>3 OR sel=4 exp FROM olle);


这个示例看起来好像并没有简化很多,但是对于复杂的表达式或经常更改的表达式,可能会产生很大的影响。

An SQLfiddle to test with

关于sql - 使CASE-WHEN-子句发出一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21939918/

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