[英]Get top n records from each of 5 tables
在 SQL Server 2016 中,我有 5 個大表。 select 在一個查詢中從 5 個表中的每個表中獲取前 1000 條記錄的最佳方法是什么?
例如,這會返回太多數據。
Select *
from table1
cross apply table2
cross apply table3
cross apply table4
cross apply table5 with(nolock)
此外,我希望從 5 個表中的每一個中獲取每一列......但只是每個表中的前 1000 行。
使用UNION ALL
而不是CROSS APPLY
。
注意:如果您只有一個查詢,那么您只有一個結果集。 結果集必須具有明確定義的列列表。 因此,您必須通過將它們放在相同的 position 中來告訴 SQL 服務器這些不同表中的哪些列是“相等的”。
例子:
SELECT TOP 1000 a, b, c FROM table1 ORDER BY d
UNION ALL
SELECT TOP 1000 x, y, z FROM table2 ORDER BY w
UNION ALL
...
在這種情況下, a
和x
的數據類型必須兼容, b
和y
相同,等等。
第一個 SELECT 語句(本例中為a
、 b
和c
)中的列名將用作結果集的列名。
如果您不關心它們是相同的結果集,只需一個返回所有結果集的查詢,您可以在 1 個查詢中創建 5 個單獨的 select 語句:
SELECT TOP 1000 * FROM table1
SELECT TOP 1000 * FROM table2
SELECT TOP 1000 * FROM table3
SELECT TOP 1000 * FROM table4
SELECT TOP 1000 * FROM table5
如果由於某種原因您需要將它們放在一個結果集中,包括行號列,那么將它們加入行號可能會起作用:
SELECT *
FROM (SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY [orderCol]) AS RN, * FROM table1) AS T1
JOIN (SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY [orderCol]) AS RN, * FROM table2) AS T2 ON T1.RN = T2.RN
JOIN (SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY [orderCol]) AS RN, * FROM table3) AS T3 ON T1.RN = T3.RN
JOIN (SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY [orderCol]) AS RN, * FROM table4) AS T4 ON T1.RN = T4.RN
JOIN (SELECT TOP 1000 ROW_NUMBER() OVER (ORDER BY [orderCol]) AS RN, * FROM table5) AS T5 ON T1.RN = T5.RN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.