2

在一个简单的RIGHT JOIN声明中:

select *
from SRC_TABLE
right join DEST_TABLE
on SRC_TABLE.COL = DEST_TABLE.COL

如何仅从 DEST_TABLE 返回与RIGHT JOIN子句不匹配的行?

4

4 回答 4

2

您仅缺少条件来仅选择没有匹配的行,在这种情况下,此列是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
于 2012-10-11T14:55:59.227 回答
2

你可能会得到更好的性能写这个:

SELECT d.*
    FROM DEST_TABLE d
    WHERE NOT EXISTS(SELECT 1
                         FROM SRC_TABLE s
                         WHERE s.COL = d.COL)
于 2012-10-11T14:57:46.440 回答
1
select *
from SRC_TABLE
right join DEST_TABLE
on SRC_TABLE.COL = DEST_TABLE.COL
where SRC_TABLE.COL IS NULL
于 2012-10-11T14:55:44.080 回答
0

执行是另一种选择

select DEST_TABLE.COL from DEST_TABLE
EXCEPT
select SRC_TABLE.COL  from SRC_TABLE
于 2012-10-11T15:44:22.430 回答