我有以下表关系:
表1 - >表2(DB中的一对多关系)
如果我在表1上执行以下查询:
select *
from table1 as t1
where t1.id = 1
我只会从该表中获得一条特定记录的记录,但如果我按照以下方式加入表2:
select *
from table1 as t1
join table2 as t2
on t1.id = t2.id
where t1.id=1
这次我将获得多条记录,如果我在表2中多次插入表1中的ID。现在的问题是,在执行此查询中的连接之后是否有任何方式只显示1条记录,在一对多的关系中??
有人可以帮我解决这个问题吗?谢谢!
我使用了koppinjo的方式,现在查询如下:
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( PARTITION BY PC.SubCategoryID
ORDER BY PC.[SubCategoryID] ) AS [Row]
,sc.*
,pc.MeasurementQuantity
,pc.Price
,pc.ProductCategoryID
,pc.ProductID
,p.Dimensions
,p.FileName
,p.ProductDescription
,p.ProductName
,mu.Unit
FROM SubCategory AS sc
JOIN ProductsCategories AS pc ON sc.SubCategoryID = pc.SubCategoryID
JOIN Products AS p ON p.ProductID = pc.ProductID
JOIN MeasurementUnits AS mu
ON mu.MeasurementUnitID = p.MeasurementUnitID
WHERE pc.SubCategoryID = 1
) AS t
WHERE t.[Row] = 1
现在问题是,查询只返回1个结果。但是,如果有两个产品属于同一类别怎么办?
P.S。我忘了提到这个查询的实际DB模式是:
产品 - > ProductsCategories< - Categories
因此,假设2个产品属于两个类别,我需要获得这两个产品,但没有重复。 Koppinjo的方式只返回1个结果......
答案 0 :(得分:1)
我建议使用像ROW_NUMBER()这样的窗口函数。例如:
SELECT *
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY t1.id ORDER BY t2.[primary/unique key]) AS [row]
,t1.*
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
WHERE t1.id = 1
) t
WHERE t.[row] = 1
这样的事情会让你指向正确的方向。希望它有所帮助!
答案 1 :(得分:0)
您可以使用distinct,不要显示table2中的任何列。类似的东西:
Event