2014-01-21 5 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 가장 높은 날짜 행을 선택하고 결과를 표시해야합니다.테이블의 최대 날짜로 결합하기

희망의 질문은 확실합니다. 미래에 내가 명시 적 조인을 사용하는 것이 좋습니다 있지만

+1

어느 테이블에서 col1, col2, col3입니까? 이것은 명확하지 않다. –

+0

@ peter.petrov 그 진짜 큰 쿼리, 예제 목적에서 나는 유일한 포인트를 가져갔습니다. 선택 쿼리 열은 Table1, Table2, Table3 및 Table4가 포함 된 다른 테이블에서입니다. –

+0

업데이트 된 답변보기 나는 당신이 아이디어를 얻을 것이라고 생각합니다. –

답변

1

다음 검색어와 같은 것을 사용해보세요.

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

/그 테이블을 제공 이름을 레코드 집합하고 대신에 조인

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에 합류 당신이 할 것입니다.

그럼 당신은 원래 TABLE3에 다시 가입 할 수 있습니다
T3
없는 TABLE3에서 다른 모든 필요한 열을 끌어 (T33 참조).

다른 세부 정보는 해결할 수 있습니다.

+0

표 3의 조인 열은 기능별로 그룹화 된 다음 해당 테이블 집합에 가입해야합니다. 나는 그것이 작동해야한다고 생각하는데, 나는 테이블에 데이터를 정렬하면 결과가 곧 나올 것이다. 고마워요 :) –

+0

@PravinSatav 네, 그건 주요 아이디어입니다. AFAIK,이 접근법은 (SQL 코드와 같이) 더 복잡해 보이지만 Radu의 대답이 제안하는 중첩 된 선택보다 효율적입니다. –

+0

@PravinSatav 이것을보십시오 : "T3.KEY에 T33 테이블에 가입하십시오. T33.KEY 및 T3.DT = T33.Day", 방금 추가했습니다. –

0

가 최소한 현재의 쿼리를 수정하려면 10g의 데이터베이스 오라클, 당신은 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') 
관련 문제