防止DB2'USING'子句隐藏SELECT [星号] ..?

时间:2018-12-03 23:22:18

标签: db2 db2-400

我正在使用DB2 / 400 v7r3。我最近发现了INNER JOIN的一个问题,如果USING语句使用SELECT(星号)从一个联接表中返回所有字段,则*子句将隐藏字段。

如何防止USING子句执行此操作??

我确实发现是否使用了ON FIELDA=FIELDB样式,所有字段的显示都正确。但这违背了拥有USING子句的目的,以及使复杂的联接更加紧凑的优点。

我在文档中找不到有关此行为的任何信息:

这里是一个例子。两个表都有三列X,Y和Z:

-- THIS ONLY RETURNS COLUMN Z
SELECT     B.*
FROM       TABLE1 AS A
INNER JOIN TABLE2 AS B 
           USING(X, Y)

-- THIS RETURNS ALL COLUMNS, X, Y, AND Z.
SELECT     B.*
FROM       TABLE1 AS A
INNER JOIN TABLE2 AS B
           ON A.X=B.X
           ON A.Y=B.Y

1 个答案:

答案 0 :(得分:1)

按设计工作...

  

联接的结果表首先包含来自USING子句的列,然后包含联接的第一个表中不在USING子句中的列,然后是联接的第二个表中的其余列,分别是不在USING子句中。在查询中不能限定USING子句中指定的任何列。

https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/db2/rbafzjoinedt.htm

使用USING时,结果集中仅包含named-columns的一个副本。

这就是你想要做的...

SELECT     X, Y, B.*
FROM       TABLE1 AS A
INNER JOIN TABLE2 AS B 
           USING(X, Y)