2012-12-17 150 views
-1

我有三个表。选择所有记录从一个表,具体的记录从另一个

Table1(Table1Id, Field1, Field2) 
Table2(Table2Id, Table1Id, AuditDate, Field1, Field2) 
Table3(Table3Id, Table1Id, AuditDate, Field1, Field2) 

我想如何处理此做的是选择所有记录和字段的表1,看看表2和表3的匹配Table1Id并选择从表3的最新AuditDate记录。我觉得我需要做一个这样的查询。

SELECT DISTINCT Table1.Table1Id, Table1.Field1, Table1.Field2, 
       Table2.Field1, Table2.Field2, 
       Table3.Field1, Table3.Field2 
FROM (Table1 
INNER JOIN Table2 ON Table1.Table1Id = Table2.Table2Id) 
INNER JOIN Table3 ON Table1.Table1Id = Table3.Table3Id 
WHERE Table3.AuditDate = 
    (SELECT MAX(AuditDate) FROM Table3 
    WHERE Table1.Table1Id = Table3.Table3Id) 

这半工程。例如,如果Table3中没有任何与Table1相关的记录,则不会返回。我需要确保创建Table1中每个记录的记录。

+0

我已经标记过此问题,因为它没有正确解释,因此我不想在回复发布后对其进行编辑。我在另一个问题中正确解释了它。 –

回答

1

它应该是这样的查询:

SELECT t1.field1..t1.fieldN, t2.field1 ... t2.fieldN, t3.field1 ... t3.fieldN 
FROM table1 AS t1 
JOIN table2 AS t2 ON t1.id=t2.id 
JOIN table3 AS t3 ON t2.id=t3.id 
-2

尝试

SELECT * FROM Table1 AS T1 
    JOIN Table2 AS T2 ON T1.Table1Id = T2.Table1Id 
    JOIN Table3 AS T3 ON T1.Table1Id = T3.Table1Id 
    GROUP BY T2.AuditDate 
+2

-1您不能选择不在“GROUP BY”中的字段。 – dan1111

0

这可能会帮助你,

select Table1Id,field1,field2 from Table1,Table2,Table3 
    where 
     Table1.Table1Id=Table2.Table2Id and 
     Table1.Table1Id=Table3.Table2Id and 
     Table2.AuditDate=Table3.AuditDate 
    group by Table1Id,field1,field2 
    having Table2.AuditDate = (
     Select max(AuditDate) from Table1,Table2,Table3 
      where 
       Table1.Table1Id=Table2.Table2Id and 
       Table1.Table1Id=Table3.Table2Id and 
       Table2.AuditDate=Table3.AuditDate 
      group by Table2.AuditDate 
    ); 
0

这听起来像你想从你的原始查询结果加上Table1(或Table2)中未找到相应记录的Table1中的记录。这可以通过将您的INNER JOIN s替换为LEFT JOIN s并将WHILE子句转换为ON子句来获得。然后,您将获得此查询,即使在其他表中找不到相应的记录,该查询也会返回Table1中的记录。

SELECT DISTINCT Table1.Table1Id, Table1.Field1, Table1.Field2, 
       Table2.Field1, Table2.Field2, 
       Table3.Field1, Table3.Field2 
FROM (Table1 LEFT JOIN Table2 
ON Table1.Table1Id = Table2.Table2Id) 
LEFT JOIN Table3 
ON Table1.Table1Id = Table3.Table3Id 
AND Table3.AuditDate = 
    (SELECT MAX(AuditDate) FROM Table3 
    WHERE Table1.Table1Id = Table3.Table3Id) 
相关问题