2011-11-15 57 views
3

我有2个表,Property和PropertyImage。 1属性有多个图像T-SQL内连接内连接的第一个结果

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

有谁知道如何做到这一点?

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

感谢

做到这一点
+1

你需要哪个'PropertyImage'结果?只是一个任意的或特定的? –

+1

你想要哪个属性图片?你能给出propertyimage的表格结构吗? – xQbert

+0

第一个很好 - 任何基本上 – user441365

回答

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) 

编辑:在选择

加列名
+0

不起作用 - 它thorws错误在这里:WHERE sub.PropertyId = p.PropertyId – user441365

+0

我不知道为什么不 - 每天使用同一选择的许多变化。你有错误还是没有结果? – Leons

+0

关键字'WHERE'附近的语法错误。 – user441365

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 

示例数据和预期产出将有助于提供一个更完整的答案。

+0

我需要得到来源和类型从PropertyImage – user441365

+0

请参阅莱昂后;它得到了你的后。 – xQbert

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 
+0

这是它 - 伟大的工作 – user441365

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) 

这应该只得到最高的 'PropertyImageID' 值PropertyImage。根据您的需要,您可以更改逻辑MAX(PropertyImageID)