簡體   English   中英

從 5 個表中的每一個中獲取前 n 條記錄

[英]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
...

在這種情況下, ax的數據類型必須兼容, by相同,等等。

第一個 SELECT 語句(本例中為abc )中的列名將用作結果集的列名。

如果您不關心它們是相同的結果集,只需一個返回所有結果集的查詢,您可以在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM