2012-12-17 238 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) 
相關問題