【发布时间】:2015-07-24 23:45:48
【问题描述】:
我的表关系如下:
表 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 个结果。但是如果有两个产品属于同一类别呢?
附:我忘了提到这个查询的实际数据库架构是:
产品 -> ProductsCategories
假设 2 个产品属于两个类别,我需要同时获取这两个产品,但不能重复。 Koppinjo 的方式只返回 1 个结果...
【问题讨论】:
-
您会获得多条记录,因为有多条记录符合您的标准。 sql serevr 如何知道从 table2 获取什么值?您需要提供一个条件来过滤 table2 中与 t1.id 具有相同 id 的行。
-
就像 Zohar Peled 所说,您需要告诉表 2 中您想查看的行。例如,您想查看表 2 中的第一行吗?还是最大的价值?您需要提供一个条件来过滤行,或者进行分组或类似的操作。
标签: sql-server sql-server-2008 tsql sql-server-2012 sql-server-2014