【问题标题】:Key and value lookup in relational database关系数据库中的键值查找
【发布时间】:2014-08-18 21:41:16
【问题描述】:

我的数据如下

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 语法都在这里工作。我还提到了this,没有用。这也是一个 DWH 环境,我们将此逻辑应用于代理键。

【问题讨论】:

    标签: sql oracle oracle11g kognitio-wx2 kognitio


    【解决方案1】:

    您只想加入两次:

    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 使用了两个不同的别名。这就是在查询中区分它们的方式。

    【讨论】:

    • +1。这是一个美丽的。需要复习基础
    猜你喜欢
    • 2010-09-12
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多