gpt4 book ai didi

SQLite 列别名

转载 作者:行者123 更新时间:2023-12-04 16:09:07 27 4
gpt4 key购买 nike

前提

我最近在代码中的 select 语句中遇到了一个错误。在我意识到发生了什么之后修复是相当微不足道的,但我有兴趣找到一种方法来确保类似的错误不会再次发生。

这是一个违规查询的示例:

select
the,
quick,
brown
fox,
jumped,
over,
the,
lazy,
dog
from table_name;

我的意图是:

select
the,
quick,
brown,
fox,
jumped,
over,
the,
lazy,
dog
from table_name;

对于那些看不到的人,前者的 brown 后面少了一个逗号。这会导致列别名,因为 as 关键字不是必需的。所以,你得到的结果是:

  the,
quick,
fox,
jumped,
over,
the,
lazy,
dog

...在名为 fox 的列中包含 brown 的所有值。对于像上面这样的短查询(尤其是当每列具有非常不同的值时),这很容易被注意到,但是它出现在一个相当复杂的查询中,其中大部分是整数列,如下所示:

select
foo,
bar,
baz,
another_table.quux,
a1,
a2,
a3,
a4,
a5,
a6,
a7,
a8,
a9,
a10,
a11,
a12,
a13,
a14,
a15,
a16,
b1,
b2,
b3,
b7,
b8,
b9,
b10,
b11,
b12,
b13,
b14,
b18,
b19,
b20,
b21,
c1,
c2,
c3,
c4,
c5,
c6,
c7,
c8
from table_name
join another_table on table_name.foo_id = another_table.id
where
blah = 'blargh'
-- many other things here
;

即使使用更好的列名,值也非常相似。如果我在 b11 之后遗漏了一个逗号(例如),然后所有 b11 值都被称为 b12,当我们通过我们的处理管道运行数据(这取决于结果中的这些列名称)。通常,我会执行 select * from table_name,但我们需要的是要求我们比这更有选择性。

问题

我正在寻找一种策略来阻止这种情况再次发生。

有没有办法在别名列时要求 as?或者写一些东西让它出错的技巧? (例如,在类 C 语言中,我开始写 1 == foo 而不是 foo == 1 ,当我不小心漏掉等号时会导致编译错误,使其成为无效的 1 = foo 而不是 foo = 1。)

我通常使用 vim,所以我可以使用 hlsearch 突出显示逗号,这样我就可以观察它。但是,我必须经常在其他环境中编写查询,包括在专有接口(interface)中我无法轻松执行此类操作。

感谢您的帮助!

最佳答案

我之前做过的一件事是将逗号移到行首。这允许一些好处。首先,您可以立即查看是否缺少任何逗号。其次,您可以在末尾添加一个新列,而无需修改之前的最后一行。

缺失:

select
the
, quick
, brown
fox
, jumped
, over
, the
, lazy
, dog
from table_name;

不丢失:

select
the
, quick
, brown
, fox
, jumped
, over
, the
, lazy
, dog
from table_name;

关于SQLite 列别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1764747/

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