sql - 如何在不获取重复列名的情况下选择 SQL 连接中的所有字段?

标签 sql database oracle

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

我正在生成一条通用的 SQL,它从主表 A 查询,并接收要连接到的表名参数,然后选择所有 A 字段 + B。

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

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

最佳答案

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

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

但基本上,我们需要更多地了解您如何构建动态 SQL。

关于sql - 如何在不获取重复列名的情况下选择 SQL 连接中的所有字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21732145/

相关文章:

database - 什么是 Hi/Lo 算法?

mysql - 为了创建我的帖子中解释的关系,我是否需要超过当前的 3 个表?

sql-server - 在sql server 2005中,如何在不丢失任何数据的情况下更改表的 "schema"?

sql - 从 Oracle/Mysql 中的通用数据创建 [物化] View

oracle - pl/sql 对象类型 "ORA-06530: Reference to uninitialized composite"错误

mysql - 使用 SELECT mysql 查询将数据导出到 CSV 文件

java - 使用 Oracle SQL Developer 调用存储过程

mysql - 通过多个相互关联的表进行 SQL 查询

oracle - 找出SQL查询的历史记录

mysql - 错误: DATEPART does not exist, frp,SQL选择上月记录