【问题标题】:Joins with multiple "." in tables用多个“.”连接在表格中
【发布时间】:2020-01-31 00:02:36
【问题描述】:

请原谅背景故事...我对 SQL 不是很有经验,但我知道的不仅仅是“足以让自己陷入困境”。我所拥有的知识是建立在我使用 MySQL 的经验之上的。我不太幸运的一件事是使用任何join(但我一直在使用我能找到的所有资源来解决这个问题)。开始吧,我试图在两张桌子上做一个join。我正在使用 SQL 工作台。我必须使用的表对我来说似乎有点奇怪,因为根据查询,我可能需要也可能不需要使用“。”调用它时。每当我尝试describe 使用show tables; 找到的任何表时,查询往往会失败,除非我添加“all_tables”。 (不是真名)在它前面。这方面的一个例子是describe all_tables.sub_table_1;。运行实际查询时,只有少数表需要“all_tables”。字首。不幸的是,我需要加入的两个表都需要该前缀。所以考虑到所有这些,我需要对join 这些表做些什么特别的事情吗?到目前为止,我已经尝试过这些事情,但没有任何运气:

select all_tables.sub_table_1.column_1 as "Code",
all_tables.sub_table_2.column_1 as "Name",
count(all_tables.sub_table_1.column_1) as "Count",
all_tables.sub_table_2.column_2 as "Description"
from all_tables.sub_table_1 as errors
left join all_tables.sub_table_2 as codes on errors.column_2=codes.column_3
and errors.column_3= codes.column_4
where errors.column_4 like 'floor_%' and errors.event_timestamp> timestamp '2019-09-30 00:00:00.000' and errors.column_5='9900' group by errors.column_1; ```

“[Teradata]Presto 查询失败:第 1:8 行:列 'all_tables.sub_table_1.column_1' 无法解析。”是输出。

我意识到这可能是一场语义噩梦(很可能也是语法)。我试过删除“all_tables”。前缀,所有as 调用,4x 检查拼写,但查询总是在同一个位置中断。我的错误是简单的,还是这里发生了更复杂的事情?预先感谢您在阅读我的小说后愿意提供帮助。

【问题讨论】:

  • 看起来您在表名上使用了别名:from all_tables.sub_table_1 as errors,因此请尝试选择alias.column_name。例如,您的第一列应如下所示:select errors.column_1

标签: sql join teradata


【解决方案1】:

您已为表定义了别名。您需要为 all 引用使用别名:

select errors.column_1 as "Code", codes.column_1 as "Name",
       count(errors.column_1) as "Count",
       codes.column_2 as "Description"
from all_tables.sub_table_1 as errors left join
     all_tables.sub_table_2 as codes
     on errors.column_2 = codes.column_3 and
        errors.column_3 = codes.column_4
where errors.column_4 like 'floor_%' and
      errors.event_timestamp > timestamp '2019-09-30 00:00:00.000' and
      errors.column_5='9900'
group by errors.column_1, codes.column_1, codes.column_2

【讨论】:

  • 谢谢。这解决了主要问题。现在我只需要弄清楚它向我抛出的“必须是聚合表达式或出现在 GROUP BY 子句中”的投诉。
【解决方案2】:

请在下面尝试,聚合问题也应该得到解决。

select errors.column_1 as "Code",
codes.column_1 as "Name",
codes.column_2 as "Description",
count(errors.column_1) as "Count"
from all_tables.sub_table_1 as errors
left join all_tables.sub_table_2 as codes 
       on errors.column_2=codes.column_3
      and errors.column_3= codes.column_4
where errors.column_4 like 'floor_%' 
  and errors.event_timestamp> timestamp '2019-09-30 00:00:00.000' 
  and errors.column_5='9900' 
group by errors.column_1,codes.column_1,codes.column_2; 

【讨论】:

    猜你喜欢
    • 2021-06-05
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2014-01-12
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多