2014-06-23 73 views
-2

我正在尋找與其他表的頂部n個結果相連的2個表,如下所述。選擇帶連接的頂部N

OrderHeader

OH_Id  OrderDate 
---------------------- 
1   2014-06-01 
2   2014-06-02 
3   2014-06-03 
4   2014-06-04 
5   2014-06-05 

OrderProducts

OP_Id  OH_Id Quantity 
------------------------------ 
1    1  1 
2    1  2 
3    2  1 
4    3  3 
5    4  4 
6    4  1 
7    4  2 
8    5  2 
9    5  1 

我期待的結果是這樣的頂級3級(4行)。

OH_Id  OrderDate  Op_Id  Quantity 
------------------------------------------------ 
1   2014-06-01  1   1 
1   2014-06-01  2   2 
2   2014-06-02  3   1 
3   2014-06-03  4   3 

注:我正在尋找特別加入2表,而不是寫作SP或循環查詢。

+2

第一件事情。你正在使用SQL Server或MySQL? –

+0

你想要'OrderHeader'中的前3個數字與'OrderProducts'中的所有相應的行? –

回答

0
select top 3 o.oh_id, o.orderdate, oo.op_id, oo.quantity 
from orderheader o 
join orderproducts oo on o.oh_id = oo.oh_id 
+0

感謝您的回覆。此查詢只給出3行,而我期望4行與前3個訂單。 – SAN

+0

更改爲排名前4位,並在末尾排列條款 –

0

如果您希望OrderHeader中的前3個數字與OrderProducts中的所有相應行都可以嘗試此操作。

select o.oh_id 
    ,o.orderdate 
    ,oo.op_id 
    ,oo.quantity 
from (SELECT TOP 3 * 
     FROM orderheader 
     ORDER BY OH_ID --or Date etc... 
    ) o 
INNER JOIN orderproducts oo 
    on o.oh_id = oo.oh_id 
0

我覺得你的描述很混亂。你不想要頂三,因爲它只會返回3行。你只是想從它聽起來像是ids 1-3。

SELECT * 
FROM OrderHeader a 
JOIN OrderHeader b on a.oh_id = b.oh_id 
WHERE a.oh_id <= 3 
+0

如果表格中的第一個訂單號是4,該怎麼辦? –

+0

不完全確定這個問題 –

0

你必須使用一個子查詢這樣

SELECT * FROM OrderHeader 
INNER JOIN OrderProducts ON OrderHeader.OH_Id = OrderProducts.OH_Id 
WHERE OrderHeader.OH_Id IN (SELECT TOP 3 OH_Id FROM OrderHeader) 

測試SQL小提琴是here

希望這有助於第一