0

我的数据如下

TABLE1
------
A  |B
1  |2
3  |4

TABLE2
------
C  |D
1  |11
2  |12
3  |13
4  |14

预期的输出是

D , D
--------
11, 12
13, 14

此输出背后的逻辑是,我需要创建一个视图,以便该视图始终返回与 table2 的列 C 匹配的 table1 中的 A 列或 B 列对应的 table2 的列 D。该视图将充当查找表,根据表 1 中的键查找表 2 中的值。如果万一,table1 中的任何一个键在 table2 中没有对应的值,则不应报告该对。

数据设置:

CREATE TABLE Table1
    ("A" number, "B" number);

INSERT ALL 
    INTO Table1 ("A", "B")       VALUES (1, 2)
    INTO Table1 ("A", "B")       VALUES (3, 4)
SELECT * FROM dual;

CREATE TABLE Table2
    ("C" number, "D" number);

INSERT ALL 
    INTO Table2 ("C", "D")       VALUES (1, 11)
    INTO Table2 ("C", "D")       VALUES (2, 12)
    INTO Table2 ("C", "D")       VALUES (3, 13)
    INTO Table2 ("C", "D")       VALUES (4, 14)
SELECT * FROM dual;

我尝试了一些使用字符串连接的连接,但它们看起来很糟糕。这实际上是一个 Kognitio 数据库,但大多数 oracle 语法都可以在这里使用。我也提到了这个没有用。这也是一个 DWH 环境,我们将这个逻辑应用于代理键。

4

1 回答 1

3

您只需加入两次:

select t2a.D, t2b.D
from table1 t2 join
     table2 t2a
     on t1.A = t2a.C join
     table2 t2b
     on t1.B = t2b.C;

注意 . 的两个不同别名的使用table2。这就是如何在查询中区分这些。

于 2014-08-18T21:45:25.523 回答