2010-08-16 69 views

回答

1

如果没有为表中定义的一个主密钥是基于整数数据类型 - 例如MySQL和SQLite都有auto_increment - 那么你可以使用:

SELECT t.* 
    FROM TABLE t 
WHERE t.id IN (1,3, 11) 

...其中id是auto_increment列。

有很少的细节去,然而MySQL和SQLite没有分析查询的支持,使得查询相当复杂:

SELECT y.* 
    FROM (SELECT t.*, 
         (SELECT COUNT(*) 
          FROM TABLE x 
          WHERE x.col <= t.col) AS rank 
       FROM TABLE t) y 
WHERE y.rank IN (1, 3, 11) 
+0

还没有检查实际的服务器,但我知道它背后的想法,并且在mysql或sqlite中没有选择单独的行支持。 这个答案有两个答案+替代选项。 – 2010-08-16 12:32:58

+0

@Downvoter:很高兴知道为什么 – 2010-08-16 17:15:06

2

首先,您永远不应该依赖数据库中行的顺序。行没有自然顺序。但是,您可以添加一个属性(例如,带有自动增量的无符号整数),用于指示行的顺序。确保无论何时编辑表格,该字段都会相应更新。

现在可以选择第一,第三和第十一行

SELECT * FROM table t 
WHERE t.order IN (1, 3, 11) 
ORDER BY t.order ASC; 
2

对于MySQL

SET @rows_count = NULL; 

select col_list,rn from 
(
    select col_list, @rows_count := IFNULL(@rows_count, 0) + 1 as rn 
    from table_name 
    order by col_list 
    limit 11) top_n 
WHERE rn IN (1,3,11) 
+0

如此花哨和复杂:P – 2010-08-16 12:31:15

0

SELECT * FROM(SELECT ROW_NUMBER()OVER(由EMPNO顺序)RNO ,e。*来自scott.emp e)其中rno在(1,3,11)

相关问题