SQLite如何获取第5列之后的每一列

q3qa4bjr  于 2023-01-31  发布在  SQLite
关注(0)|答案(1)|浏览(160)

假设我有以下名为urls的sql表:
| 网址|重定向|岁入|实际收入|点击德国|点击美国|点击印度|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 嘎什克特格|google.com|0.321|六十九点五一分|十五|二十八|三十三|
| OQJkgf1|example.cn|0.252|小行星1424.3|小行星1202|十个|六十九|
| 嘎什克特格|corn.shop|一点二四二|小行星42525.2|小行星325525|小行星1230|四百二十|
现在我想获取realRevenue之后的每一列,在这个例子中你可以使用realRevenue之后的列的名字来获取,但是在我的例子中,有更多的字段在realRevenue之后。
我需要什么查询?

7ajki6be

7ajki6be1#

如果您的字段与示例输入中显示的字段相对应,您应该直接选择您需要的字段。如果它们比我们在这里看到的多,请检查下一部分。
只要SQLite does not support dynamic queries存在,就不能自动创建查询。
尽管可以通过访问两个表"* sqlite_master "和" pragma_table_info *"来检索表中感兴趣的字段,这两个表分别包含有关表名和表字段的信息。通过按表名和字段ID进行过滤,可以获得所有字段的列表。

SELECT p.name AS column_name
FROM sqlite_master             AS m
JOIN pragma_table_info(m.name) AS p ON m.name = 'tab' AND p.cid >= 4

输出:
| 列名|
| - ------|
| 点击德国|
| 点击美国|
| 点击印度|
但是,您也可以准备将它们硬编码到SELECT语句中,对表名和每个表字段的连接应用GROUP_CONCAT

SELECT GROUP_CONCAT(m.name || '.' || p.name, ', ') AS fields
FROM sqlite_master             AS m
JOIN pragma_table_info(m.name) AS p ON m.name = 'tab' AND p.cid >= 4

| 田野|
| - ------|
| tab.单击德国,tab.单击美国,tab.单击印度|
查看here演示。

    • 注意**:如果您的字段数量非常大,以至于手工编写所有字段成为一项耗时的任务,则此解决方案非常有用。

相关问题