2010-08-16 100 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)