如何选择SQL连接中的所有字段而不获取重复的列名称?

时间:2014-02-12 15:27:08

标签: sql database oracle

假设我有一个表A,有10个字段。和表B,有5个字段。 B通过名为“key”的列链接到A,该列存在于A和B中,具有相同的名称(“key”)。

我正在生成一个通用的SQL,它从主表A查询,并接收要加入的表名参数,并选择所有A字段+ B.

在这种情况下,我将获得我想要的所有15个字段,或者更准确地说 - 16,因为我得到“密钥”两次,一次来自A,一次来自B。

我想要的只是获得15个字段(主表中的所有字段+通用表中存在的字段),而不会获得两次“密钥”。 当然,我可以在SELECT本身中显示我想要的字段,但这阻碍了构建通用SQL的目标。

2 个答案:

答案 0 :(得分:0)

这实际上取决于您使用它的RDBMS,以及您如何组装动态SQL。例如,如果您正在使用Oracle并且它是将您的SQL放在一起的PL / SQL过程,那么您可能会查询USER_TAB_COLS或类似的东西。在这种情况下,您可以获得列名称的最终列表,如

SELECT DISTINCT(column_name)
FROM   user_tab_cols
WHERE  table_name IN ('tableA', 'tableB');

但基本上,我们需要了解更多关于如何构建动态SQL的信息。

答案 1 :(得分:0)

重新思考我的问题让我得出结论认为这不合理。从SELECT语句中选择列从提供的表列表中选择我们感兴趣的列。如果所涉及的多个表中存在相同的列名,这是我的问题所解决的情况,那么理想情况下,如果数据库引擎可以返回一个唯一的字段列表,那将是很好的 - 但是 - 为此它必须从所有匹配中决定自己选择哪一列(以及从哪个表中选择) - 这是DB无法做到的事情,因为它完全取决于用户的选择。