DB2 v8 for z/OS 中的交叉连接

Posted

技术标签:

【中文标题】DB2 v8 for z/OS 中的交叉连接【英文标题】:CROSS JOIN in DB2 v8 for z/OS 【发布时间】:2015-07-14 07:03:06 【问题描述】:

我正在使用 IBM DB2 v8(新功能模式)并且我正在使用 Entity Framework 5.0.0 我有一个 LINQ 查询可以在我的环境中完美执行,但它在另一个环境中不起作用。我试图通过调试代码来提取为该 LINQ 查询生成的 SQL 查询。我尝试在我的环境(DB2 DB v9.1 和 DB2 驱动程序 10.5)中执行该 SQL,它运行良好。对于相同的查询,它在我的另一个环境中不起作用:DB2 DB v8(新功能模式)和 DB2 驱动程序 9.7。它给出了"CROSS" JOIN 的错误。当我使用 LINQ 时,查询是自动生成的,我无法更改。我也想让它在我的第二个环境中运行。下面我给出了我的示例查询。请让我知道是否有任何方法可以解决这个问题?

SELECT t1.MyName, t2.MySalary
FROM Employee t1 CROSS JOIN Salary t2

我收到以下错误:

非法符号“十字架”。一些可能是合法的符号是:。 SQLCODE=-104,SQLSTATE=42601

【问题讨论】:

【参考方案1】:

V8 不支持CROSS JOIN 子句。来自手册:

V8:http://www-01.ibm.com/support/knowledgecenter/SSEPGG_8.2.0/com.ibm.db2.udb.doc/admin/r0000875.htm

连接表

>>-+-table-reference--+-----------+--JOIN--table-reference--ON--join-condition-+-><
   |                  '-| outer |-'                                            |
   '-(--joined-table--)--------------------------------------------------------'

V9.5:http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000875.html

连接表

>>-+-table-reference--+-----------+--JOIN--table-reference--ON--join-condition-+-><
   |                  '-| outer |-'                                            |   
   +-table-reference--CROSS JOIN--table-reference------------------------------+   
   '-(--joined-table--)--------------------------------------------------------'   

请注意较新版本中的新 CROSS JOIN 子句。附带说明一下,不再支持 V8,您应该真正切换到较新的版本;-)

HTH。

【讨论】:

OP 显然在生产中使用 DB2 for z/OS,其中 CROSS JOIN 语法直到版本 10 才可用。为什么要在完全不同的平台上测试应用程序,我无法理解。 啊,抱歉,错过了问题的 z/OS 部分。我的链接适用于 LUW。感谢您的评论!

以上是关于DB2 v8 for z/OS 中的交叉连接的主要内容,如果未能解决你的问题,请参考以下文章

DB2 for z/OS:CURSOR FOR UPDATE 锁定行为

我想使用 SQL for DB2 z/OS v9 计算模式中所有表中的记录

在 DB2 sql for z/os 中用 0 填充 smallint

在 DB2 for Z/OS 中创建表分区

如何在 DB2 for Z/OS 中返回系统日期或日期时间?

对 DB2 for z/OS 的存储过程调用中不支持字符串文字