代码之家  ›  专栏  ›  技术社区  ›  Larry

从3个表内部联接获取多个结果的SQL查询

  •  -1
  • Larry  · 技术社区  · 7 年前

    我正在运行一个sql查询(使用microsoft report builder)连接三个表并得到重复的表,我似乎无法阻止这一点。

    我有一个表(tableA),其中包含相关字段ownerID、propertyID、vacationDate。我想找到房主的名字和他们所在的最新房产。(他们可能在多处房产中,我只对最近的一处房产感兴趣)所有者的姓名位于Ownertable上,并通过ownerID链接,而房产地址位于propertytable下,并通过propertyID链接。我试图用最新的假期日期和特定的属性ID获取每个OwnerID,然后内部连接两个表以获取名称和地址。我曾尝试选择“max(vacation)”,然后选择“GROUP BY”,但我遇到了问题,因为我使用的是报表生成器,并且必须在所有字段上使用GROUP BY子句,而不仅仅是OwnerID,这也会为每个单独的属性带来最新的vac日期。请找个人把我带上正轨。非常感谢。

    我所做的一件事的样本;

    对不起,我没有在我的电脑上给一个确切的例子,这里是一个简化的版本,如果这有帮助。


    table A
    
    ownerid      propertyid      vacation
    1            2               1991
    2            5               1993
    1            3               1992
    1            4               1997
    2            6               2000
    2            9               2007
    

    因此,我想为每个所有者选择一行,其中包含上一个假期的属性id,对于这个示例,我希望如下所示

    ownerid     propertyid    vacation
    1           4             1997
    2           9             2007
    

    我在下面尝试了这个,但得到了重复的。

    SELECT tableA.propertyid, tableA.ownerid, MAX(tableA.vacation), propertytable.propertyname, ownertable.ownername FROM tableA 
    
    INNER JOIN propertytable on tableA.propertyid = propertytable.id
    
    INNER JOIN Ownertable on tableA.ownerid = ownertable.id
    
    GROUP BY tableA.property, tableA.owner, propertytable.propertyname, ownertable.ownername
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Prabhath Amaradasa    7 年前

    我认为您必须编写一个子查询

    “获取每个所有者ID的最新假期日期”,如下所示

        SELECT
    rs.ownerid,
    rs.propertyid,
    rs.vacation
    FROM
    (
    SELECT
    ownerid,
    propertyid,
    vacation,
    MAX(vacation) OVER(PARTITION BY ownerid) AS maxDate
    FROM  TableA
    
     ) as rs  
    
      WHERE rs.vacation = rs.maxDate