gpt4 book ai didi

c - 来自另一个表的 SQLITE UPDATE 字段 IF NULL

转载 作者:搜寻专家 更新时间:2023-10-30 23:42:56 26 4
gpt4 key购买 nike

我有一个 具有不同表的数据库。我正在做的是 UPDATE 表的最后插入行,其中包含来自同一表的另一条记录或来自另一个类似表的数据。

我成功了,但我想知道我的解决方案是否正确或缺少某些内容,以及我是否可以用更紧凑、更快速的方式编写它。

此外,我的代码非常难以管理,因为如果将来表结构发生变化,我将必须重写查询以添加或删除字段。

我在犹豫是否可以写一个 从表中获取整条记录并更新同一表的另一条记录中的所有 NULL 字段的查询。

sprintf(global_sql, "UPDATE "\
"Table1 "\
"SET "\
"fiedl1 = case when fiedl1 is null then (SELECT fiedl1 FROM Table1 WHERE Table1_id = %d) else fiedl1 end, "\
"fiedl2 = case when fiedl2 is null then (SELECT fiedl2 FROM Table1 WHERE Table1_id = %d) else fiedl2 end, "\
"fiedl3 = case when fiedl3 is null then (SELECT fiedl3 FROM Table1 WHERE Table1_id = %d) else fiedl3 end "\
"WHERE "\
"Table1_id = (SELECT max(Table1_id) FROM Table1)", sourceRecord_idx, sourceRecord_idx, sourceRecord_idx);

如您所见,对于每个字段,我必须编写其特定的 SET 案例,而且每个字段的值都是通过选择检索的。

我想/希望有一种更简单、更易于维护的方法来做到这一点。

最佳答案

您可能会认为这更易于维护,
至少它少了一些“三重复制代码”:

with shortcut(f1, f2, f3) as
(SELECT fiedl1, fiedl2, fiedl3 FROM Table1 WHERE Table1_id = %d)
UPDATE Table1 SET
fiedl1 = ifnull(fiedl1, (SELECT f1 FROM shortcut)),
fiedl2 = ifnull(fiedl2, (SELECT f2 FROM shortcut)),
fiedl3 = ifnull(fiedl3, (SELECT f3 FROM shortcut))
WHERE Table1_id = (SELECT max(Table1_id) FROM Table1)
;

详细信息:

  • 使用 CTE 减少条件重复和其他快捷方式
  • 使用ifnull 使条件值更简单、更短

在 SQLite 3.9.1 上测试,使用固定值而不是 %d

关于c - 来自另一个表的 SQLITE UPDATE 字段 IF NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32840729/

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