第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在Microsoft SQL Server 2000中模擬MySQL LIMIT子句

在Microsoft SQL Server 2000中模擬MySQL LIMIT子句

函數(shù)式編程 2019-10-18 15:08:15
當(dāng)我處理Zend Framework的數(shù)據(jù)庫(kù)組件時(shí),我們嘗試抽象化LIMITMySQL,PostgreSQL和SQLite支持的子句的功能。也就是說(shuō),可以通過(guò)以下方式創(chuàng)建查詢(xún):$select = $db->select();$select->from('mytable');$select->order('somecolumn');$select->limit(10, 20);當(dāng)數(shù)據(jù)庫(kù)支持時(shí)LIMIT,將生成如下所示的SQL查詢(xún):SELECT * FROM mytable ORDER BY somecolumn LIMIT 10, 20對(duì)于不支持的數(shù)據(jù)庫(kù)品牌來(lái)說(shuō),這更為復(fù)雜LIMIT(順便說(shuō)一句,該子句不是標(biāo)準(zhǔn)SQL語(yǔ)言的一部分)。如果您可以生成行號(hào),則使整個(gè)查詢(xún)成為派生表,并在外部查詢(xún)中使用BETWEEN。這是針對(duì)Oracle和IBM DB2的解決方案。Microsoft SQL Server 2005具有類(lèi)似的行號(hào)功能,因此可以通過(guò)以下方式編寫(xiě)查詢(xún):SELECT z2.*FROM (    SELECT ROW_NUMBER OVER(ORDER BY id) AS zend_db_rownum, z1.*    FROM ( ...original SQL query... ) z1) z2WHERE z2.zend_db_rownum BETWEEN @offset+1 AND @offset+@count;但是,Microsoft SQL Server 2000沒(méi)有該ROW_NUMBER()功能。因此,我的問(wèn)題是,您能否提出一種LIMIT僅使用SQL 來(lái)模擬Microsoft SQL Server 2000中的功能的方法?無(wú)需使用游標(biāo)或T-SQL或存儲(chǔ)過(guò)程。它必須同時(shí)支持LIMITcount和offset的兩個(gè)參數(shù)。使用臨時(shí)表的解決方案也不可接受。編輯:MS SQL Server 2000的最常見(jiàn)解決方案似乎類(lèi)似于以下解決方案,例如獲取第50至75行:SELECT TOP 25 *FROM (   SELECT TOP 75 *  FROM   table   ORDER BY BY field ASC) a ORDER BY field DESC;但是,如果總結(jié)果集為60行,則此方法不起作用。內(nèi)部查詢(xún)返回60行,因?yàn)樗挥谇?5位。然后外部查詢(xún)返回35-60行,該行不適合所需的50-75“頁(yè)面”?;旧?,該解決方案有效,除非您需要結(jié)果集的最后“頁(yè)面”恰好不是頁(yè)面大小的倍數(shù)。
查看完整描述

3 回答

?
侃侃無(wú)極

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

);


查看完整回答
反對(duì) 回復(fù) 2019-10-18
?
紫衣仙女

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


查看完整回答
反對(duì) 回復(fù) 2019-10-18
?
蝴蝶刀刀

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à)) )。


查看完整回答
反對(duì) 回復(fù) 2019-10-18
  • 3 回答
  • 0 關(guān)注
  • 761 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)