Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLite中获取行号?_Sqlite_Row Number - Fatal编程技术网

如何在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,则结果完全不同。您的查

我读过很多关于如何在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;
查询结果如下:

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;