쿼리는 올바른 것 같다
SQL> WITH tableA AS (SELECT 1 ID, 'A' col1 FROM dual
2 UNION ALL SELECT 2 ID, 'B' FROM dual),
3 tableB AS (SELECT 1 ID, 'B' col1 FROM dual)
4 SELECT a.Col1, b.Col1,
5 CASE
6 WHEN a.Col1 <> b.Col1 THEN
7 'TRUE'
8 ELSE
9 'FALSE'
10 END CASE
11 FROM TableA a
12 LEFT OUTER JOIN TableB b ON a.id = b.id;
COL1 COL1 CASE
---- ---- -----
A B TRUE
B FALSE
을 그러나 요소 중 하나가 FALSE를 반환합니다 NULL 인 경우 (A의 행 예를 들어 B에 존재하지 않는 경우) 당신이 볼 수있다. 다만 케이스를 역방향 NULL 또는 B에 어떤 요소가있을 때 당신이 TRUE 얻고 싶은 경우에 :
SQL> WITH tableA AS (SELECT 1 ID, 'A' col1 FROM dual
2 UNION ALL SELECT 2 ID, 'B' FROM dual),
3 tableB AS (SELECT 1 ID, 'B' col1 FROM dual)
4 SELECT a.Col1, b.Col1,
5 CASE
6 WHEN a.Col1 = b.Col1 THEN
7 'FALSE'
8 ELSE
9 'TRUE'
10 END CASE
11 FROM TableA a
12 LEFT OUTER JOIN TableB b ON a.id = b.id;
COL1 COL1 CASE
---- ---- -----
A B TRUE
B TRUE
이 문제가 b는 다음 NULL 인 경우 a <> b
이 TRUE 나 FALSE도 있다는 사실에서 유래는 알 수없는 것입니다
업데이트 : 귀하의 코멘트에 대한 - 당신이 B A <가> 추가 조항 그렇게 할 수있을 때의 경우를 추가하려면 :
SELECT a.Col1, b.Col1,
CASE
WHEN a.Col1 = b.Col1 THEN
'FALSE'
WHEN to_char(SYSDATE, 'D') = 7 THEN
'S'
ELSE
'O'
END CASE
FROM TableA a
LEFT OUTER JOIN TableB b ON a.id = b.id;
a.Col1와 b에 대한 데이터 유형은 무엇입니까. Col1? –