完全外部连接Oracle
我从不同的表格中获得了以下数据集完全外部连接Oracle,oracle,Oracle,我从不同的表格中获得了以下数据集 Table1 ------- EMPID DEPID C1 C2 SUM --------------------------- 100 200 2 3 111 100 200 4 4 222 Table2 ------- EMPID DEPID C1 C2 SUM --------------------------- 100 200 4 4 3
Table1
-------
EMPID DEPID C1 C2 SUM
---------------------------
100 200 2 3 111
100 200 4 4 222
Table2
-------
EMPID DEPID C1 C2 SUM
---------------------------
100 200 4 4 333
100 200 5 6 444
我要找的结果---
任何帮助都是非常感激的。我使用了完全外部联接,但无法实现此目的。您希望在
(emp\u id,dep\u id)
上使用完全外部联接
在(c1,c2)
上使用内部联接。我想你不可能一步就写出这个连接条件。我提出了一个两步查询(一个完全外部联接
,然后是一个过滤器子查询)
请注意,我在示例中的T2
中添加了一行,以演示内部联接
您希望上有内部联接
(emp\u id,dep\u id)
和上的完全外部联接
(c1,c2)
。我想你不可能一步就写出这个连接条件。我提出了一个两步查询(一个完全外部联接
,然后是一个过滤器子查询)
请注意,我在示例中的T2
中添加了一行,以演示内部联接
oracle的哪个版本?联接应位于哪些列上<代码>t1.c1=t2.c1
<代码>t1.c2=t2.c2?他们两个?或者t1.c1=t2.c2
<代码>t2.c1=t1.c2?或者这两者?连接条件是T1.EMP_ID=T2.EMP_ID和T1.DEP_ID=T2.DEP_ID和T1.C1=T2.C1和T1.C2=T2.C2。。因此,我正在检查上述四个条件,如果C1和C2匹配,我将打印两个表中的和,否则相应的coulmns将为NULL。@如果缺少empid
或depid
,您还没有显示所需的结果。我正在寻找T1.EMP\u ID=T2.EMP\u ID和T1.DEP\u ID=T2.DEP_ID和T1.C1=T2.C1和T1.C2=T2.C2的外部连接。。。。所以我只需要T1.EMP_ID=T2.EMP_ID和T1.DEP_ID=T2.DEP_ID始终满足的记录。EMPID和DEPTID将始终存在于T1和T2中。oracle的哪个版本?连接应该在哪些列上<代码>t1.c1=t2.c1<代码>t1.c2=t2.c2?他们两个?或者t1.c1=t2.c2
<代码>t2.c1=t1.c2?或者这两者?连接条件是T1.EMP_ID=T2.EMP_ID和T1.DEP_ID=T2.DEP_ID和T1.C1=T2.C1和T1.C2=T2.C2。。因此,我正在检查上述四个条件,如果C1和C2匹配,我将打印两个表中的和,否则相应的coulmns将为NULL。@如果缺少empid
或depid
,您还没有显示所需的结果。我正在寻找T1.EMP\u ID=T2.EMP\u ID和T1.DEP\u ID=T2.DEP_ID和T1.C1=T2.C1和T1.C2=T2.C2的外部连接。。。。所以我只需要T1.EMP_ID=T2.EMP_ID和T1.DEP_ID=T2.DEP_ID始终满足的记录。EMPID和DEPTID将始终在T1和T2中..谢谢Vincent..但是连接条件是T1.EMP_ID=T2.EMP_ID和T1.DEP_ID=T2.DEP_ID和T1.C1=T2.C1和T1.C2=T2.C2。。因此,我正在检查上述四个条件,如果C1和C2匹配,我将打印两个表中的和,否则相应的coulmns将为NULL。这正是我写的连接条件,你不同意吗?我的应用程序用于混淆。。我必须确保T1.EMP_ID=T2.EMP_ID和T1.DEP_ID=T2.DEP_ID始终有效。。这里,完整的外部连接将提供所有记录,即使其中一个表中没有emp_id和dept_id的记录。总结一下,我正在寻找T1.emp_id=T2.emp_id和T1.DEP_id=T2.DEP_id的内部连接,以及T1.C1=T2.C1和T1.C2=T2.C2的外部连接。您的示例数据没有涵盖所有情况,那么=)请参阅我的更新答案。谢谢Vincent…但是连接条件是T1.EMP_ID=T2.EMP_ID和T1.DEP_ID=T2.DEP_ID和T1.C1=T2.C1和T1.C2=T2.C2。。因此,我正在检查上述四个条件,如果C1和C2匹配,我将打印两个表中的和,否则相应的coulmns将为NULL。这正是我写的连接条件,你不同意吗?我的应用程序用于混淆。。我必须确保T1.EMP_ID=T2.EMP_ID和T1.DEP_ID=T2.DEP_ID始终有效。。这里,完整的外部连接将给出所有记录,即使其中一个表中没有emp_id和dept_id的记录。总结一下,我正在寻找T1.emp_id=T2.emp_id和T1.DEP_id=T2.DEP_id的内部连接,以及T1.C1=T2.C1和T1.C2=T2.C2的外部连接。您的示例数据没有涵盖所有情况,那么=)请参阅我更新的答案。
Table1
-------
EMPID DEPID T1.C1 T1.C2 T2.C1 T2.C2 T1.SUM T2.SUM
--------------------------------------------------------------
100 200 2 3 NULL NULL 111 NULL
100 200 4 4 4 4 222 333
100 200 NULL NULL 5 6 NULL 444
SQL> WITH t1 AS (
2 SELECT 100 emp_id, 200 dep_id, 2 c1, 3 c2, 111 sum FROM dual UNION ALL
3 SELECT 100 emp_id, 200 dep_id, 4 c1, 4 c2, 222 sum FROM dual
4 ), t2 AS (
5 SELECT 100 emp_id, 200 dep_id, 4 c1, 4 c2, 333 sum FROM dual UNION ALL
6 SELECT 100 emp_id, 200 dep_id, 5 c1, 6 c2, 444 sum FROM dual UNION ALL
7 SELECT 100 emp_id, 300 dep_id, 7 c1, 8 c2, 555 sum FROM dual
8 )
9 SELECT COALESCE(t1.emp_id, t2.emp_id) emp_id,
10 COALESCE(t1.dep_id, t2.dep_id) dep_id,
11 t1.c1, t1.c2, t2.c1, t2.c2, t1.sum, t2.sum
12 FROM t1
13 FULL OUTER JOIN t2
14 ON t1.emp_id = t2.emp_id
15 AND t1.dep_id = t2.dep_id
16 AND t1.c1 = t2.c1
17 AND t1.c2 = t2.c2
18 WHERE (COALESCE(t1.emp_id, t2.emp_id), COALESCE(t1.dep_id, t2.dep_id))
19 IN (SELECT t1.emp_id, t1.dep_id
20 FROM t1
21 JOIN t2 ON t1.emp_id = t2.emp_id
22 AND t1.dep_id = t2.dep_id)
23 ORDER BY t1.c1;
EMP_ID DEP_ID C1 C2 C1 C2 SUM SUM
---------- ---------- ---------- ---------- ---------- ---------- ---- ----
100 200 2 3 111
100 200 4 4 4 4 222 333
100 200 5 6 444