gpt4 book ai didi

sqlite - 在case语句中命名复杂的子选择 "as"

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

我试图防止一个复杂的子选择的结果(它被用作更大的 INSERT 语句的一部分)为 NULL。该字段的值必须是空字符串而不是 NULL。

总的来说,插入看起来像这样:

INSERT INTO record (id,field1,field2) VALUES (val1,val2,<complex select>);

为了防止复杂的选择为 NULL,我可以使用:
SELECT CASE WHEN <complex select> THEN <complex select> else '' end as b

问题是,我不想重复复杂的选择,因为它会使查询变大两倍,难以阅读,如果必须稍微更改查询就容易出错等,所以我想将结果命名为选择所以我可以只引用该值。但是当我尝试这样做时,我得到一个错误:
SELECT CASE WHEN <complex select> as a THEN a else '' end as b

或者
SELECT CASE WHEN (<complex select> as a) THEN a else '' end as b

错误是:
near "as": syntax error

最佳答案

您可以为复杂选择的列命名,但要从子查询中获取值,您必须使用另一个 SELECT:

INSERT INTO record (id,field1,field2)
VALUES (val1,
val2,
(SELECT CASE WHEN a THEN a else '' END
FROM (SELECT ... AS a FROM ...)
);

(子查询本身可以被命名,但在这里无关紧要。)

但是,要将 NULL 值转换为空字符串,您可以使用 IFNULL function :
INSERT INTO record (id,field1,field2)
VALUES (val1,
val2,
IFNULL((SELECT ...), '')
);

关于sqlite - 在case语句中命名复杂的子选择 "as",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856177/

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