table_name。* table_name给定别名时的无效标识符

时间:2017-09-29 16:22:07

标签: sql oracle11g

当我在一系列内部联接之后发出SELECT查询询问特定表的所有值时,应用程序使用table_name抱怨我。*说它是“无效的标识符”。

SELECT  value,
        starting
FROM    (
            SELECT  value,
                    starting,
                    ROW_NUMBER() OVER (PARTITION BY value ORDER BY starting DESC) as cnt
            FROM    #Table t
                    LEFT JOIN #Lookup l
                        ON l.starting < t.value
        ) a
WHERE   cnt = 1

这就是我遇到的所有问题。

    SELECT tab_a.*
    FROM tab_a ta INNER JOIN tab_b tb
        ON tab_a.foo = tab_b.foo
    WHERE tab_a.bar LIKE 'a'
    MINUS
    SELECT tab_a.*
    FROM tab_a ta INNER JOIN tab_b tb
        ON tab_a.foo = tab_b.foo
    WHERE tab_b.bar LIKE 'b';

我正在使用Oracle的服务器软件。

2 个答案:

答案 0 :(得分:1)

以下是您的代码的相关部分:

WHERE tab_b.bar LIKE 'b';
    SELECT tab_a.*

分号结束您的第一个查询。您的第二个查询不完整,因为它没有where子句。因此,错误。

答案 1 :(得分:1)

事实证明,我在查询中为表提供了别名。出于某种原因,当在查询中给出别名时,Oracle不会识别该表的原始名称,这是导致该问题的原因。

我的问题的一个简单解决方案是替换此

的所有实例
    tab_a.*

用这个

    ta.*

如果我要在FROM子句中为tab_a提供别名。

    FROM tab_a ta