gpt4 book ai didi

sqlite - 如何在 SQLite 中获取行号?

转载 作者:行者123 更新时间:2023-12-03 16:18:36 29 4
gpt4 key购买 nike

我已经阅读了很多关于如何在 SQLite 中使用行号的文章,但没有一篇文章给了我需要的答案。我知道如何使用此查询选择行号:

SELECT (SELECT COUNT() FROM table WHERE title < t.title OR (title = t.title AND id<t.id)) as rowIndex, t.title FROM table AS t ORDER BY t.title;

但如果我添加 COLLATE NOCASE (我需要)在查询结束时结果完全不同。

最佳答案

您的查询包含错误:未定义别名“ja”。

像这样尝试:

SELECT 
( SELECT COUNT(*) + 1
FROM "table"
WHERE title < t.title OR (title = t.title AND id<t.id)
) as rowIndex,
t.title
FROM "table" t
ORDER BY t.title;

但是,请注意,此子查询构造不能很好地扩展。对于大型数据集,您可能希望创建一个临时表并使用 ROWID(如所讨论的,例如, here )。

编辑:
使用 COLLATE NOCASE 进行测试:
CREATE TABLE "table" (id INTEGER, title TEXT COLLATE NOCASE);

INSERT INTO "table" VALUES
(1, "Book A"),
(2, "Book b"),
(3, "Book C"),
(4, "Book B"),
(5, "Book a");

查询产生:
1|Book A
2|Book a
3|Book b
4|Book B
5|Book C

编辑:

如果不想声明 COLLATE NOCASE 列,则必须确保在 ORDER BY 部分以及子查询中使用 COLLATE:
SELECT 
( SELECT COUNT(*) + 1
FROM "table"
WHERE title < t.title COLLATE NOCASE OR (title = t.title COLLATE NOCASE AND id<t.id)
) as rowIndex,
t.title
FROM "table" t
ORDER BY t.title COLLATE NOCASE;

关于sqlite - 如何在 SQLite 中获取行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479253/

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