2009-03-13 6 views
1

가입 내에서 사용하여 Oracle에서 다음을 수행 할 수있는 방법이 있나요 : 표준 SQL에서는 ON 혼합 한이

SELECT * 
FROM Tbl1 
JOIN Tbl2 
USING (col1) 
AND ON Tbl1.col2 = Tbl2.col3 

답변

1

, 당신은 사용할 수 있습니다 사용 또는 ON 있지만 둘 다. 두 가지를 모두 사용할 수 있다면, 예제에서 AND를 생략하십시오. PMV 댓글을 달았


(더 정확하게, 질문 - 또한 포스터의 답변을 참조)

내 문제는 내가 조인을 사용하여 테이블의 무리, 모두를 가지고있다. 다른 키 이름을 가진 테이블을 추가하려고하면 모호한 열 오류가 발생합니다. 내 모든 조인을 ON 조인으로 변환하지 않고이 작업을 수행하는 우아한 방법이 있습니까?

음, 슬프게도 잘못된 이름 컬럼에 의해 부과되는 피해를 최소화하는 가장 좋은 방법은 아마도 (그리고 대략 - 나는 아래의 SQL 디버깅 적이 없다)입니다 :

SELECT * 
    FROM (SELECT * 
      FROM Tbl1 
        JOIN Tbl2 USING (col1, col2, col3, col4) 
        JOIN Tbl3 USING (col2, col4, col6, col23) 
        JOIN Tbl4 USING (col2, col8, col3, col23) 
     ) AS SystematicNaming 
      JOIN Tbl5 
       ON SystematicNaming.Col1 = Tbl5.Col1 
       AND SystematicNaming.ColA = Tbl5.PoorlyNamedColA 
       AND SystematicNaming.ColB = Tbl5.PoorlyNamedColB 

이 편리하고 체계적인 보존을 가능한 한 오랫동안 표기법을 사용하고 Tbl5와 조인하는 데 필요한 비 균일 열 이름이 주어지면 관리해야하는 방식으로 Tbl5와 조인을 관리합니다.

나는 그것이 합리적이라고 생각하지만 이것이 가장 좋은 쿼리 레이아웃이라고 확신하지는 않습니다.

+0

내 문제는 내가 조인 사용과 테이블의 무리, 모두를 가지고있다. 다른 키 이름을 가진 테이블을 추가하려고하면 모호한 열 오류가 발생합니다. 모든 조인을 ON 조인으로 변환하지 않고이 작업을 수행하는 적절한 방법이 있습니까? –

1
SELECT * FROM TBL1 JOIN TBL2 ON TBL1.COL1 = TBL2.COL1 AND TBL1.COL2 = TBL2.COL3 

감사 K

0
SELECT * 
FROM Tbl1 
     INNER JOIN Tbl2 
ON  Tbl1.col1 = Tbl2.col1 
    AND Tbl1.col2 = Tbl2.col3