防止DB2'USING'子句隐藏SELECT[asterisk]返回的字段。。?

防止DB2'USING'子句隐藏SELECT[asterisk]返回的字段。。?,db2,db2-400,Db2,Db2 400,我正在使用DB2/400V7R3。我最近发现了一个内部联接的问题,如果SELECT语句使用*星号从一个联接表返回所有字段,USING子句就会隐藏字段 如何防止USING子句执行此操作 我发现如果使用ON FIELDA=FIELDB样式,所有字段都会正确显示。但这违背了USING子句的目的,也违背了它使复杂连接更加紧凑的优势 我在文档中找不到有关此行为的任何信息: 这里有一个例子。两个表都有三列X、Y和Z: -- THIS ONLY RETURNS COLUMN Z SELECT B.*

我正在使用DB2/400V7R3。我最近发现了一个内部联接的问题,如果SELECT语句使用*星号从一个联接表返回所有字段,USING子句就会隐藏字段

如何防止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
按设计工作

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

当您仅使用一个命名列的副本时,命名列将包含在结果集中

这就是你想做的

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

啊,太好了。。!!我试过你的建议,它奏效了。。!!然后因为我终于有了一个工作结果,我能够比以前做更多的进一步实验。我试着从表2开始翻转表,然后只使用SELECT*…和其他一些组合,甚至不同类型的联接。但似乎你的解决方案是唯一的办法。这不是最完美的选择*,但它比在FOO=BAR表达式和几十个字段名上键入六个要好得多。。!!