【发布时间】:2021-03-26 03:37:41
【问题描述】:
我有两个具有匹配键的表。一些记录存在于两个表上,而另一些记录只存在于一个或另一个上。我一生无法弄清楚的是如何在进行完全外部联接时向两个表添加条件。
表 A(编辑:带标准)
+---------------------------+
| ID, AREA, STATUS, YEAR |
+----------------------------+
| ID1, AA, YES, 1980 |
| ID2, BB, NO, 1990 |
| ID3, CC, YES, 1950 |
| ID4, DD, NO, 1900 |
表 B(编辑:带标准)
+--------------------------+
| ID, ZONE, CODE, TIME |
+--------------------------+
| ID1, FF, 1, 12:00 |
| ID5, HH, 1, 11:11 |
| ID6, II, 1, 13:00 |
希望加入
+------------------------------------------+
| ID, AREA, STATUS, YEAR, ZONE, CODE, TIME |
+------------------------------------------+
| ID1, AA, YES, 1980, FF, 1, 2000 |
| ID2, BB, NO, 1990, n/a, n/a, n/a |
| ID3, CC, YES, 1950 n/a, n/a, n/a |
| ID4, DD, NO, 1900 n/a, n/a, n/a |
| ID5, n/a, n/a, n/a, HH, 1, 2001 |
| ID6, n/a, n/a, n/a, II, 1, 2000 |
到目前为止,我有以下代码。它为我返回除了 ID5 和 ID6 之外的所有内容,由于某种原因,它不会在表 A 中的 col 为空(n/a)的连接中带来行。
SELECT A.ID, A.AREA, A.STATUS, A.YEAR, B.ID, B.ZONE, B.CODE, B.TIME
FROM TableA A
FULL JOIN TableB B
ON A.ID = B.ID AND /* criteria for B */ (B.ZONE > XX AND B.CODE >= XX)
WHERE /* criteria for A */ A.YEAR > XXXX
我是否将我的标准放在了不正确的位置?如何进行完全联接,同时对 TableA 和 TableB 应用条件?
【问题讨论】:
-
MySQL 作为标签是否真的相关?
-
MySQL 不支持
FULL JOIN所以这个问题显然与 MySQL 无关。 @大卫 。 . .请仅使用您真正使用的数据库标记您的问题。
标签: sql oracle oracle-sqldeveloper