-1

私は3つのテーブルを持っています。

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

これでやりたいことは、Table1 のすべてのレコードとフィールドを選択し、Table2 と Table3 を調べて一致する Table1Id を探し、Table3 から最新の 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 のすべてのレコードのレコードが作成されていることを確認する必要があります。

4

4 に答える 4

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
于 2012-12-17T14:10:27.257 に答える
0

元のクエリの結果に加えて、対応するレコードが Table3 (または Table2) に見つからない Table1 のレコードが必要なようです。INNER JOINこれは、 s をs に置き換え、句を句にLEFT JOIN変換することで取得できます。次に、他のテーブルに対応するレコードが見つからない場合でも、Table1 からレコードを返すこのクエリを取得します。WHILEON

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)
于 2012-12-18T00:02:33.310 に答える
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
    );
于 2012-12-17T14:13:34.590 に答える
-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
于 2012-12-17T14:10:52.013 に答える