hana SQL视图中的重复列标题

问题描述 投票:0回答:2

[在尝试创建视图时,出现错误'重复列名:PXX_ID'。我无法进行内部联接,因为要联接的两列中的大多数数据都不匹配,因此我仍然需要所有数据。现在,我知道可以通过为该列添加别名来避免这种情况,但是这将使我的处境变得困难,因为我要在视图中放入近100个表,其中一些表将具有多个匹配的列,并且我已经在使用动态SQL了。让它起作用。还有什么其他方法可以保留两个表中的所有列并仍将其保存在视图中?

Here is my code

sql hana
2个回答
0
投票

你不明白吗?您有一个子查询,该子查询从两个表中选择所有列。两个表中的任何列名称都将重复。至少要复制PXX_ID,因为它用于JOIN处理,并且在两个表中都清楚显示。

无论如何,在视图中使用select *是一个坏主意。您应该列出所有列。


0
投票

这里发布的问题的直接答案是@Gordon Linhoff已经提到的内容。

“这很愚蠢,不应该做这样的事情,如果您这样做,则需要显式地写出每个列名。”

我完全同意。

BUT ...

基于您最近在SO和SAP社区中的其他问题(特别是这个问题:Is there a way to create a dynamic flat file?),我相信您已经了解了您要实现的目标。

这是我对这个总体问题的回答;

我假设这与您的另一个问题https://answers.sap.com/questions/13054093/duplicate-column-headers-hana.html有关。

因此,从本质上讲,您知道一些条件,并且知道与该条件相匹配的数据在数据库中。现在,您希望将数据导出到单个平面文件中。

这是非常不确定的问题描述。

一种方法是只遍历数据库中的每个表,将其内容写出到文件中,然后为每个表添加相同的文件。

以某种方式有用吗?可能不会,因为从不同表保存的每个数据块都会改变文件中存储的数据结构。

您的其他问题暗示要通过匹配某些ID列将数据连接在一起。通过使用FULL OUTER JOIN,您基本上可以说: 我不在乎是否有匹配项,如果有则将数据彼此相邻。

听起来正确吗?

综合考虑,您似乎希望的数据结构看起来像这样:

(Table 1: col_ID, col_1, col_2, ...) + (Table 2: col_ID, col_1, col_23) ...

我在这里用'+'表示“ 粘在一起”。

这是讨论中的要点,您应该意识到,您尝试在不同于SELECTCREATE VIEW提供的水平上解决问题。

SQL是一种静态语言,这意味着它所使用的数据结构已明确指定。它从不“ like”,但始终“ 特定表/列/视图” ...

为了实现您似乎想做的事情,您需要创建一个为数据库创建静态SQL命令的过程。

那些静态SQL命令将创建列的“粘合在一起”。

幸运的是,您可以编写这样的程序。

生成的SQL(非动态)

SQL数据库随附数据库目录,该目录允许检查哪些表可用以及所有这些表具有哪些列。

您的程序现在需要遍历所有表(您认为与此相关),并找出在何处多次使用了列名。

对于每种冲突,您都需要决定如何处理它(更改输出名称,只使用其中一列,完全将其忽略)。

此处理阶段将生成具有唯一列名(加上源表引用)和联接表的投影列的列表。

下一步是将其转换为有效的SQL。这应该很简单,因为该语句的通用结构只是SELECT ... <all your columns> FROM <table> OUTER JOIN <table> ...

应用陈述

现在,您已经创建了输出结构,并使用SELECT来填充它-您回到了“静态类型”状态,并且所有SQL工具又可以正常工作。

也许您熟悉Java和OO,如果这样,可以将其视为一个

DB2FlatFileStatementFactory (IN db_catalog, OUT sql_statement) 

事物的种类。

注意事项

采用将所有数据彼此粘合的方法,您强烈假设数据模型实际上只是一组否则独立的表,每个表中每个ID最多一个记录。尽管这可能是一种非常罕见的数据库设计(并且通常是错误的/错误的)。

由于您的方法在很大程度上依赖于此假设,因此您可能需要考虑检查每个表是否都适用(例如,通过检查所有ID列实际上是表的完整主键来进行。

无论如何,现在您知道该怎么做。(几乎在任何SQL DBMS上,而不仅仅是在HANA上)

© www.soinside.com 2019 - 2024. All rights reserved.