2014-01-21 78 views
2
SELECT COL1, 
    COL2, 
    COL3 
FROM TABLE1, 
    TABLE2, 
    TABLE3, 
    TABLE4 
WHERE TABLE1.KEY1 = TABLE2.KEY1 
    AND TABLE2.KEY = TABLE3.KEY 
    AND TABLE2.FILTER = 'Y' 
    AND TABLE3.FILTER = 'Y' 
    AND TABLE2.KEY = TABLE3.KEY 
    AND TABLE3.KEY = TABLE4.KEY 

我有一個類似的查詢,我需要做修改,在表3中有一個日期列,我需要選擇最高日值行加入。假設表格3中有4行滿足加入要求,爲了加入目的,我需要從這4箇中挑選出最高日期行,然後顯示結果。加入最大日期從表

希望的問題很明確。數據庫Oracle 10g的

+1

哪個表是col1,col2,col3?這不清楚。 –

+0

@ peter.petrov它的真正的大查詢,從示例目的我只採取了imp點。選擇查詢列來自包括Table1,Table2,Table3和Table4的不同表格 –

+0

請參閱我的更新答案。我想你會明白的。 –

回答

1

嘗試類似此查詢。

SELECT 
    COL1, 
    COL2, 
    COL3, 
    T33.* 

FROM TABLE1 

JOIN TABLE2 ON TABLE1.KEY1 = TABLE2.KEY1 

JOIN TABLE4 ON TABLE2.KEY = TABLE4.KEY 

JOIN 

(
    SELECT MAX(T.Day) as DT, T.KEY 
    FROM TABLE3 T 
    WHERE T.FILTER = 'Y' 
    GROUP BY T.KEY 
) T3 on TABLE4.KEY = T3.KEY 

JOIN TABLE3 T33 ON T3.KEY = T33.KEY AND T3.DT = T33.Day 

WHERE 

TABLE2.FILTER = 'Y' 

主要的想法是,與其
加入到TABLE3你這樣做:

SELECT MAX(T.Day) as DT, T.KEY 
FROM TABLE3 T 
WHERE T.FILTER = 'Y' 
GROUP BY T.KEY 

給該表/記錄集的名稱並加入到它,而不是。

然後你就可以到原TABLE3再次加入(見T33
拉從TABLE3這是
T3不存在其他所有需要的列。

我想你可以計算出其他細節。

+0

連接表3中的列將成爲group by by的一部分,然後在我需要加入該表的記錄集之外。我認爲它應該可以工作,我在表格中安排數據將很快得到結果。謝謝:) –

+0

@PravinSatav是的,這是主要想法。 AFAIK,這種方法看起來更復雜(如SQL代碼),但比Radu的答案所暗示的嵌套選擇更有效。 –

+0

@PravinSatav看到這個:「JOIN TABLE3 T33 ON T3.KEY = T33.KEY和T3.DT = T33.Day」,我剛剛添加它。 –

0

最低限度地修改當前的查詢,可以雖然在未來我建議使用明確連接在你的WHERE條款

AND TABLE3.DATE = (SELECT MAX(DATE) FROM TABLE3 WHERE TABLE3.FILTER = 'Y') 

添加條件。

SELECT COL1, 
    COL2, 
    COL3 
FROM TABLE1 
    INNER JOIN TABLE2 ON TABLE1.KEY1 = TABLE2.KEY1 
    INNER JOIN TABLE3 ON TABLE2.KEY = TABLE3.KEY 
    INNER JOIN TABLE4 ON TABLE3.KEY = TABLE4.KEY 
WHERE 
    TABLE2.FILTER = 'Y' 
    AND TABLE3.FILTER = 'Y' 
    AND TABLE3.DATE = (SELECT MAX(DATE) FROM TABLE3 WHERE TABLE3.FILTER = 'Y')