採用的方法是希望下一次TSQL就能夠解決,而不是在.cs中取的 categoryid 丟入到TSQL內取TOP 1
這樣的方式會增加很多各連線出來,所以希望下一次TSQL命令就可以解決。
今天與同事剛好要做找分類下的最新一筆資料,就討論出兩種查詢的方法,
就跟大家分享一下,
首先先說明一下,資料的欄位結構,有兩個資料表 LinkCategories (是Master ) 1 : * Images (是Detail)
然後關連的欄位是 categoryid
SELECT CategoryID FROM dbo.LinkCategories
SELECT imageid,categoryid fROM dbo.Images
採用的方法是希望下一次TSQL就能夠解決,而不是在.cs中取的 categoryid 丟入到TSQL內取TOP 1
這樣的方式會增加很多各連線出來,所以希望下一次TSQL命令就可以解決。
大概想了一下,我的解法是
1.先 Group by categoryid
2.透過MAX() 取出最大的imageid (ps.條件方面大家可以依狀況改變)
3.最後取到的都是最新的imageid 再來跟 IN
WHERE ImageID IN
(
SELECT MAX(ImageID )
FROM Images AS i2
GROUP BY(CategoryID)
)
而同事的另一種處理方法則是
在子查詢 SELECT 欄位的時候是透過欄位來產生最大ImageID ,
透過欄位相等的概念,然後在同一個 categoryid 都是會查出對應 DESC 後的 TOP 1 imageID
WHERE ImageID IN
(
SELECT
(SELECT TOP 1 ImageID FROM dbo.ImageS
Where CategoryID = LinkCategories.CategoryID
order by ImageID DESC)
FRom dbo.LinkCategories
)
兩種解法都可以讓最後的答案變成透過一次的命令,就能查出分類下最新的imageid
當然可以延伸拿來查每天的最新的一筆(論壇最適合這種)或訂單的最後一筆 等等....
至於哪一種方法比較好,就要看狀況來決定,但兩種方法再加上 WHERE 條件都能降低查詢出來的資料,
達成要查詢的任務,並且避免增加過多的連線數,不知道大家還有沒有其他方法,也可以一起分享討論。