我正在尝试编写一个SQL查询,如果一条记录与TableB至少有一个匹配项,则允许我从TableA中排除该记录。
我已经写了一些代码,如下所示,这几乎能满足我的需要-
SELECT a.ID,
a.OPEN_DT,
b.LINKCREATED,
b.RULE__ID
FROM TableA a
LEFT JOIN TableB b
ON a.ROW_WID = b.A_ROW_WID
WHERE EXTRACT(YEAR FROM a.OPEN_DT) >= '2013'
AND NOT EXISTS (SELECT *
FROM TableB
WHERE A_ROW_WID = a.ROW_WID
AND EXTRACT(YEAR FROM b.CREATED) >= '2017')
;
表A
ROW_WID | ID | OPEN_DT
---------------------------------
1 | A | 2013-01-01
2 | B | 2014-01-01
3 | C | 2017-01-01
RULE_ID | A_ROW_WID | LINKCREATED
---------------------------------
1 | A | 2014-01-01
2 | A | 2017-01-01
3 | B | 2017-01-01
上面的查询将为row_WID=1返回1行,为row_WID=2返回1行,为row_WID=3返回零。
我希望我的查询完全排除ROW_WID=1,因为表B中有一行是2017年的。
我希望这个问题是清楚的,但如果不是,请告诉我。
预期结果如下-
ID | OPEN_DT | LINKCREATED | RULE_ID
C | 2017-01-01 | NULL | NULL
表A中的ID“C”在表B中没有链接。