sql – 如果不使用别名,如何从内部查询中识别连接列?

由于一些动态SQL的复杂性,我需要将两个表连接在一起并从结果中查询,就好像它是一个表一样.扭曲的是我必须对内部查询进行SELECT * – 我不能对列进行别名.似乎没有办法在外部查询中识别这些列.

以这些表为例

CREATE TABLE test_tab1 (join_key NUMBER, tab1_uqcol VARCHAR2(30));
CREATE TABLE test_tab2 (join_key NUMBER, tab2_uqcol VARCHAR2(30));
INSERT INTO test_tab1 VALUES (1, 'table 1 only');
INSERT INTO test_tab2 VALUES (1, 'table 2 only');

我可以轻松地对其独特的列进行过滤

SELECT *
FROM (
    SELECT *
    FROM test_tab1 t1
    INNER JOIN test_tab2 t2
    ON t1.join_key = t2.join_key
) joined
WHERE tab1_uqcol LIKE 'table%';

但如果我试图引用他们共同的专栏……

SELECT *
FROM (
    SELECT *
    FROM test_tab1 t1
    INNER JOIN test_tab2 t2
    ON t1.join_key = t2.join_key
) joined
WHERE join_key = 1;

然后它告诉我join_key是一个无效的标识符.同上t1.join_key,test_tab1.join_key,“t1.JOIN_KEY”,“T1.JOIN_KEY”和“TEST_TAB1.JOIN_KEY”.如何识别这些星级选定的列?

最佳答案 您不需要使用别名,但您需要更明确地在派生表中命名列.例如…

    SELECT *
    FROM (
        SELECT t1.join_key, t1.tab1_uqcol, t2.tab2_uqcol
        FROM test_tab1 t1
        INNER JOIN test_tab2 t2
        ON t1.join_key = t2.join_key
    ) joined
    WHERE join_key = 1;

由于您使用的是内连接,因此无需区分两个不同的join_key列.您只需在内部查询中列出其中一个,以便外部查询不会混淆.

点赞