我正在使用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
答案 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)