簡単にRIGHT JOIN
言えば:
select *
from SRC_TABLE
right join DEST_TABLE
on SRC_TABLE.COL = DEST_TABLE.COL
RIGHT JOIN
句と一致しなかった DEST_TABLE の行のみを返すにはどうすればよいですか?
これを次のように書くと、パフォーマンスが向上する可能性があります。
SELECT d.*
FROM DEST_TABLE d
WHERE NOT EXISTS(SELECT 1
FROM SRC_TABLE s
WHERE s.COL = d.COL)
一致しなかった行のみを選択する条件が不足しているだけで、この場合、この列はNULL
.
select *
from SRC_TABLE
right join DEST_TABLE
on SRC_TABLE.COL = DEST_TABLE.COL
WHERE SRC_TABLE.COL IS NULL -- ADD THIS LINE
select *
from SRC_TABLE
right join DEST_TABLE
on SRC_TABLE.COL = DEST_TABLE.COL
where SRC_TABLE.COL IS NULL
EXECEPT は別のオプションです
select DEST_TABLE.COL from DEST_TABLE
EXCEPT
select SRC_TABLE.COL from SRC_TABLE