如何处理sql列名引用中不明确的列引用?
我有一些代码:如何处理sql列名引用中不明确的列引用?,sql,join,pyspark,databricks,azure-databricks,Sql,Join,Pyspark,Databricks,Azure Databricks,我有一些代码: CREATE OR REPLACE TEMPORARY VIEW cctv_join_1 AS SELECT * FROM cctv1_details AS A LFET JOIN cctv3_details AS B ON (A.CDE_WR = B.CDE_WR) AND A.CDE_dist = B.CDE_dist 然后我试试看 CREATE OR REPLACE TEMPORARY VIEW cctv_join_2 AS (S
CREATE OR REPLACE TEMPORARY VIEW cctv_join_1
AS
SELECT *
FROM cctv1_details AS A
LFET JOIN cctv3_details AS B ON (A.CDE_WR = B.CDE_WR) AND A.CDE_dist = B.CDE_dist
然后我试试看
CREATE OR REPLACE TEMPORARY VIEW cctv_join_2
AS
(SELECT *
FROM cctv_join_1 AS A
LEFT JOIN cctv5_details AS B ON (A.CDE_WR = B.CDE_WR) AND (A.CDE_dist = B.CDE_dist))
但我犯了个错误
SQL语句中出错:AnalysisException:引用“A.CDE_WR”不明确,可能是:A.CDE_WR,A.CDE_WR。;第6行第4位置
在数据库里。如何处理此问题?此查询:
SELECT *
FROM cctv1_details c1d LEFT JOIN
cctv3_details c3d
ON c1d.CDE_WR = c3d.CDE_WR AND c1d.CDE_dist = c3d.CDE_dist
正在使用SELECT*。*是两个表中所有列的缩写
显然,两个表中的组合列具有重复的列名;至少,CDE_WR和CDE_dist-可能还有其他的。一般的解决方案是列出所有列:
SELECT c1d.col1, c1d.col2, . . . c3d.colx, c3d.coly
FROM cctv1_details c1d LEFT JOIN
cctv3_details c3d
ON c1d.CDE_WR = c3d.CDE_WR AND c1d.CDE_dist = c3d.CDE_dist;
然而,这通常被短接到:
SELECT c1d.*, c3d.colx, c3d.coly
FROM cctv1_details c1d LEFT JOIN
cctv3_details c3d
ON c1d.CDE_WR = c3d.CDE_WR AND c1d.CDE_dist = c3d.CDE_dist;
请注意,我将表别名更改为表名的合理缩写,使查询更清晰、更易于维护。尝试选择a.*和b.*但我们总是明确地命名字段,以帮助人们阅读我们正在做的事情。此外,如果您在选择中重复使用相同的别名,它会起作用吗?你能试着在第二个语句中使用D和E吗?