假设我有一个表A,有10个字段。和表B,有5个字段。 B通过名为“key”的列链接到A,该列存在于A和B中,具有相同的名称(“key”)。
我正在生成一个通用的SQL,它从主表A查询,并接收要加入的表名参数,并选择所有A字段+ B.
在这种情况下,我将获得我想要的所有15个字段,或者更准确地说 - 16,因为我得到“密钥”两次,一次来自A,一次来自B。
我想要的只是获得15个字段(主表中的所有字段+通用表中存在的字段),而不会获得两次“密钥”。 当然,我可以在SELECT本身中显示我想要的字段,但这阻碍了构建通用SQL的目标。
答案 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无法做到的事情,因为它完全取决于用户的选择。