3 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
SELECT TOP n *
FROM tablename
WHERE key NOT IN (
SELECT TOP x key
FROM tablename
ORDER BY key
DESC
);

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
這是僅在Sql Server 2005及更高版本中有效的另一種解決方案,因?yàn)樗褂胑xcept語(yǔ)句。但是我還是分享。如果要獲取記錄50-75,請(qǐng)輸入:
select * from (
SELECT top 75 COL1, COL2
FROM MYTABLE order by COL3
) as foo
except
select * from (
SELECT top 50 COL1, COL2
FROM MYTABLE order by COL3
) as bar

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
僅在需要LIMIT時(shí),ms sql具有等效的TOP關(guān)鍵字,因此很清楚。當(dāng)您需要使用OFFSET進(jìn)行LIMIT時(shí),您可以嘗試使用如前所述的一些技巧,但是它們都會(huì)增加一些開(kāi)銷(xiāo),例如,用于訂購(gòu)一種方式然后再訂購(gòu)另一種方式,或者昂貴的NOT IN操作。我認(rèn)為不需要所有這些級(jí)聯(lián)。在我看來(lái),最干凈的解決方案是在SQL端使用無(wú)偏移的TOP,然后使用適當(dāng)?shù)目蛻?hù)端方法(如php中的mssql_data_seek)尋求所需的起始記錄。盡管這不是純SQL解決方案,但我認(rèn)為這是最好的解決方案,因?yàn)樗粫?huì)增加任何開(kāi)銷(xiāo)(跳過(guò)的記錄在您經(jīng)過(guò)它們時(shí)將不會(huì)在網(wǎng)絡(luò)上傳輸,如果您擔(dān)心的話(huà)) )。
- 3 回答
- 0 關(guān)注
- 761 瀏覽
添加回答
舉報(bào)