【发布时间】:2019-07-08 14:35:29
【问题描述】:
我有多个查询,我试图将它们组合成一个查询,但没有成功。我在同一张表上两次使用不同字段的左连接,这听起来不对。
SELECT a.*
, b.CODE_DESCRIPTION AS highest_grade
FROM BBOP.EP_MAIN_FACT a
LEFT JOIN BBOP.EP_CODE_WORK b
ON a.HIGHESTGRADE_CA = b.code
AND code_type LIKE 'High%'
LEFT JOIN BBOP.EP_CODE_WORK ab
ON a.Goal_Steps = ab.code
AND code_type LIKE 'Goal%'
WHERE plan_date BETWEEN '01-mar-2019' AND '31-may-2019';
-- ORA-00918: 列定义不明确 00918. 00000 - “列定义不明确”
这是 2 个查询,它们分别产生没有问题的结果。
-- 最高等级
SELECT a.*
, b.CODE_DESCRIPTION AS highest_grade_desc
FROM BBOP.EP_MAIN_FACT a
LEFT JOIN BBOP.EP_CODE_WORK b
ON a.HIGHESTGRADE_CA = b.code
WHERE plan_date BETWEEN '01-mar-2019' AND '31-may-2019'
AND code_type LIKE 'High%';
-- 目标
SELECT a.*
, b.CODE_DESCRIPTION AS Goal
FROM BBOP.EP_MAIN_FACT a
LEFT JOIN BBOP.EP_CODE_WORK b
ON a.Goal_Steps = b.code
WHERE plan_date BETWEEN '01-mar-2019' AND '31-may-2019'
AND code_type LIKE 'Goal%';
【问题讨论】:
-
我用
oracle重新标记了您的问题,因为错误消息清楚地表明您使用的是 Oracle,而不是 Microsoft SQL Server。 -
向我们展示数据库架构、示例数据、当前和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example
-
@a_horse_with_no_name 是的,它的 Orcale 很抱歉,目前都打开了,所以我把它们弄混了。
-
在第一个查询的第 4,6 和 7 行使用
code_type和plan_date之前的表的别名 -
问题的解决方案 (ORA-00918) 是正确地为每一列加上它来自的表名。