안녕하십니까?
좀 잘 이해가 안되는 SQL 결과에 대하여 왜 이렇게 되는지 고견을 듣고 싶습니다.
먼저 다음과 같은 SQL의 결과는
WITH BASE_TABLE AS
(
SELECT '1' CODE , 'A' TEXT FROM DUAL
)
SELECT
*
FROM BASE_TABLE A
, DUAL B
WHERE B.DUMMY (+) = A.CODE
/
CODE TEXT DUMMY
1 A
이렇게 나옵니다.
그런데 다음의 SQL은 아무런 행도 리턴하지 않습니다.
WITH BASE_TABLE AS
(
SELECT '1' CODE , 'A' TEXT FROM DUAL
)
SELECT
*
FROM BASE_TABLE A
, DUAL B
WHERE B.DUMMY (+) = '1'
/
그런데 다음과 같이 아무 컬럼이나 되도 않게 조인을 걸면 됩니다.
WITH BASE_TABLE AS
(
SELECT '1' CODE , 'A' TEXT FROM DUAL
)
SELECT
*
FROM BASE_TABLE A
, DUAL B
WHERE B.DUMMY (+) = '1'
AND A.CODE = B.DUMMY (+)
/
CODE TEXT DUMMY
1 A
그리고 다음과 같이 ANSI 문법을 사용하면 됩니다.(결과가 나옵니다.)
WITH BASE_TABLE AS
(
SELECT '1' CODE , 'A' TEXT FROM DUAL
)
SELECT
*
FROM BASE_TABLE A
LEFT JOIN
DUAL B
ON (
B.DUMMY = '1'
)
....... 이유가 뭘까요?
|