Oracle SQL如何在连接条件中解析限定名称

时间:2016-07-12 10:10:39

标签: sql oracle

您能解释一下我甚至指出Oracle SQL文档在哪里可以找到以下问题的解释:

考虑以下运行正常的查询:

Select * from DUAL join DUAL on DUAL.DUMMY='X';

我希望Oracle能够说出“不明确的表格参考”和#39; (或类似的东西),但它执行精细返回一行有两列。有什么想法吗?此外,删除列限定条件将导致列不明确定义'错误。

我使用Oracle SQL v.12.1

运行查询

1 个答案:

答案 0 :(得分:2)

Oracle中有许多特殊情况。在这种情况下,后一个定义会覆盖第一个定义。像

SELECT * FROM (SELECT 2 VAL FROM DUAL) DUAL JOIN (SELECT 1 VAL FROM DUAL) DUAL ON DUAL.VAL = 2

不会返回任何行。

SELECT * FROM (SELECT 2 VAL FROM DUAL) DUAL JOIN (SELECT 1 VAL FROM DUAL) DUAL ON DUAL.VAL = 1

返回一个。

您可以使用因子子查询执行相同的操作,但在这种情况下,后一个定义不会覆盖第一个:

WITH T AS (SELECT 1 X FROM DUAL),
T AS (SELECT 2 X FROM DUAL)
SELECT
    *
FROM
    T

返回1.

但我强烈建议不要依赖这些行为并使用独特的对象资格。