![](/img/trans.png)
[英]Join tables on a unique ID field, returning exactly one result row per Id value
[英]Returning one row per id with inner join
在SQL Server數據庫中,我有兩個表,一個表是另一個的父表。 子表與父表具有多對一關系。 我只需要為每個父項返回一個記錄,而其對應的子表記錄則是最上面的。 但是我不知道該怎么做。
以下是我現在擁有的查詢:
SELECT DISTINCT
products.id,
sku,
name,
mediaid
FROM
products
INNER JOIN
productmedia ON products.id = productmedia.productid
WHERE
sku IN ('HCFL 207 23 (A)','HCFL 207 22 (A)','HCFL 207 21 (A)','HCFL 207 20 (A)')
AND productmedia.sort = 100
我得到以下信息:
183816 HCFL 207 20 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 1/4", WIDE INNER RACE INSERT -ASIAN 2929082
183816 HCFL 207 20 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 1/4", WIDE INNER RACE INSERT -ASIAN 2929083
183817 HCFL 207 21 (A) HCFL SERIES-2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 5/16", WIDE INNER RACE INSERT-ASIAN 2929138
183817 HCFL 207 21 (A) HCFL SERIES-2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 5/16", WIDE INNER RACE INSERT-ASIAN 2929139
183818 HCFL 207 22 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 3/8", WIDE INNER RACE INSERT -ASIAN 2929086
183818 HCFL 207 22 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 3/8", WIDE INNER RACE INSERT -ASIAN 2929087
183819 HCFL 207 23 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 7/16", WIDE INNER RACE INSERT -ASIAN 2929084
183819 HCFL 207 23 (A) HCFL SERIES- 2-BOLT FLANGE, ECCENTRIC LOCKING COLLAR, BORE DIA. 1 7/16", WIDE INNER RACE INSERT -ASIAN 2929085
;with cte as(
select s.id studentId, s.name, c.class,
ROW_NUMBER() over(partition by class order by s.id) rn
from Student s
inner join class c on s.classId = c.id
)
select * from cte where rn = 1
您可以將“按s.id排序”更改為您認為對結果進行排序所基於的任何其他列。
CROSS APPLY
是您的朋友:
SELECT DISTINCT
products.id,
sku,
name,
mediaid
FROM
products
CROSS APPLY (
SELECT TOP(1)
* -- List the required columns!
FROM
productmedia
WHERE
products.id = productmedia.productid
AND productmedia.sort = 100
ORDER BY
YourOrderColumn -- Change it to your required order!
) AS X
WHERE
sku IN ('HCFL 207 23 (A)','HCFL 207 22 (A)','HCFL 207 21 (A)','HCFL 207 20 (A)')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.