T-SQL内连接是内连接的第一个结果

时间:2011-11-15 17:28:20

标签: sql sql-server

我有2个表,Property和PropertyImage。 1物业有多个图像

我需要获取所有属性,每个属性只需要1个PropertyImage。

有谁知道如何实现这一目标?

Property: PropertyID, Name
PropertyImage: PropertyImageID, PropertyID, Source, Type

由于

4 个答案:

答案 0 :(得分:6)

下面是一个示例,其中选择了Property中的所有记录以及PropertyImage中的最后一条记录,假设id列是标识列,而最后一条记录是您需要的记录。您需要根据确切的列名称和要求进行调整。

SELECT p.PropertyID, p.Name, pi.PropertyImageID, pi.Source, pi.Type 
  FROM Property p 
       INNER JOIN PropertyImage pi
         ON pi.PropertyImageId = (SELECT MAX(sub.PropertyImageId) 
                                    FROM PropertyImage sub
                                   WHERE sub.PropertyId = p.PropertyId)

编辑:在选择

中添加了列名

答案 1 :(得分:2)

;WITH PI
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY PropertyID 
                                       ORDER BY (SELECT 0)) AS RN
         FROM   PropertyImage)
SELECT P.PropertyID,
       P.Name,
       PI.PropertyImageID,
       PI.Source,
       PI.Type
FROM   Property P
       JOIN PI
         ON P.PropertyID = PI.PropertyID
WHERE  PI.RN = 1  

答案 2 :(得分:0)

这样做的一种方法是

SELECT P.PropertyID, P.Name, max(PI.PropertyImageID) 
from Property P 
INNER JOIN PropertyImage PI 
ON P.PropertyID = PI.PropertyID
GROUP BY P.PropertyID, P.name

示例数据和所需输出将有助于提供更完整的答案。

答案 3 :(得分:0)

尝试 -

Select Property.PropertyID
FROM Property
INNER JOIN PropertyImage pi on pi.PropertyID = Property.PropertyID 
WHERE pi.PropertyImageID = (SELECT MAX(PropertyImageID) FROM PropertyImage WHERE PropertyID = Property.PropertyID)

这应该只获得具有最高'属性图像ID'值的属性图像。您可以根据需要更改MAX(PropertyImageID)逻辑。