【发布时间】:2018-03-27 10:46:28
【问题描述】:
我这里有几个 SQL 查询-
WITH emp AS
(SELECT 1 AS empid, 'Adam' AS ename, 10 AS deptno, 'Broker' AS description FROM dual
UNION ALL
SELECT 2, 'Bob', 20, 'Accountant' FROM dual
UNION ALL
SELECT 3, 'Charles', 30, 'Programmer' FROM dual
UNION ALL
SELECT 4, 'Dan', 10, 'Manager' FROM dual
UNION ALL
SELECT 5, 'Eric', 10, 'Salesman' FROM dual
UNION ALL
SELECT 6, 'Franc', 20, 'Consultant' FROM dual),
dept AS
(SELECT 10 AS deptno, 'Accounts' AS dname, 100 employment_type_id FROM dual
UNION ALL
SELECT 20, 'Broking', 100 FROM dual
UNION ALL
SELECT 30, 'Corporate Relations', 200 FROM dual),
employment_type AS
(SELECT 100 AS employment_type_id, 'Permanent' AS description FROM dual
UNION ALL
SELECT 200, 'Contract' FROM dual)
/* --- Query 1
select e.ename, d.dname, e.description
from emp e
inner join dept d on e.deptno = d.deptno
inner join employment_type e on d.employment_type_id = e.employment_type_id
-- */
-- /* Query 2
SELECT e.ename, d.dname, e.description
FROM employment_type e
INNER JOIN dept d ON e.employment_type_id = d.employment_type_id
INNER JOIN emp e ON d.deptno = e.deptno
-- */
;
正如您在两个查询中看到的,表 emp 和 employment_type 的别名相同,即 e。
当我通过说 e.description 选择列时,我不应该收到类似
不明确的列引用
而且,两次查询的结果是不同的!第一个选择emp.description,第二个选择employment_type.description。
请告诉我为什么会发生这种情况以及如何避免由此引起的混乱。
【问题讨论】:
-
我只看到一个查询有 E 别名
-
正如@NishantGupta 的链接问题的回答者所说,这看起来像是一个Oracle 错误——它肯定应该抱怨别名已被使用了两次,即使没有常见的列名。避免这种混淆的明显方法是不要在查询中两次使用相同的别名!
-
@BasilBattikhi,一个查询被评论,另一个没有。我已经添加了它们以供大家参考我正在尝试做的事情。尝试在运行另一个查询时评论一个查询,您会看到结果的不同。我需要知道为什么 Oracle 不抛出错误。