如何在SQLite中获取行号?
我读过很多关于如何在SQLite中使用行号的文章,但没有一篇给出我需要的答案。我知道如何使用此查询选择行号:如何在SQLite中获取行号?,sqlite,row-number,Sqlite,Row Number,我读过很多关于如何在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,则结果完全不同。您的查
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;
查询结果如下:
1|Book A
2|Book a
3|Book b
4|Book B
5|Book C
编辑:
如果不想声明列COLLATE NOCASE,则必须确保在ORDER BY part以及子查询中使用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;
如果没有rownum部分,您的查询会是什么样子?这取决于您想要什么类型的行号:如果您想要一个唯一标识基础表中某一行的数字,请使用ROWID。如果要对查询结果的行进行编号:某些数据库提供ROWNUM pseuo字段,但sqlite不提供AFAIK。已经提出了使用子查询的解决方案,例如,.Sorry ja.title是一个错误,我已经纠正了它。您的查询的工作方式与我的相同,但问题是当我编辑查询时…ORDER BY t.title COLLATE NOCASE;。我必须使用COLLATE NOCASE创建表吗?不,不必这样做。但是,您必须确保在子查询中一致地使用COLLATE NOCASE。我也将此添加到解决方案中。
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;