子选择问题

时间:2009-04-06 11:52:59

标签: sql ibm-midrange rpgle

我正在尝试在AS400上的SQL中进行子选择并获得“数据转换或数据映射错误” - 我很确定它与SQL在子选择中处理日期的方式有关(特别是它正在改变通过在十进制字段中添加逗号的格式,当它进行下一次选择时它会变得混乱) - 有人可以为我确认这个吗?也许建议我如何解决这个问题?

基本上,我有类似下面的内容,日期为十进制,格式如下:CCYYMMDD(即如果您只是选择日期为CC,YYM,MDD)。日期来自table3

SELECT *
FROM TABLE1 A
     CROSS JOIN TABLE2 B
     LEFT OUTER JOIN (SELECT *
                      FROM TABLE3 C 
                      LEFT OUTER JOIN TABLE4 D ON (blah)
                      INNER JOIN TABLE5 E  ON (blah)
                      WHERE DATE >= 20080101
                      AND   DATE <= 20090101
                     ) AS C ON (blah AND blah)

3 个答案:

答案 0 :(得分:4)

我对AS / 400的经验很少并且过时了,但你的问题是经典的分而治之。

隔离子查询 - 它本身运行正常吗? 然后从表1开始,确保交叉查询有效 然后添加子查询。

我不知道AS / 400是否支持它,但SQL Server的公用表表达式非常有用 - 基本上是本地范围的视图。我只提到它,因为您可以创建一个视图,这是您的子查询,以便更好地理解。

总而言之,我怀疑你的问题是在'等等'中。)

答案 1 :(得分:2)

如果您正在使用本机AS400 db,它的风格是:DB2 for iSeries(不要与DB2 for Linux和其他平台混淆)

如果是这样,表3中的DATE字段是CCYYMMDD格式的十进制数字,如你所说,你的比较就好了。逗号是应用于显示的小数的格式,不与值一起存储。

我同意n8wrl,尝试一个简单的“从表3中选择DATE&gt; = 20080101”并查看是否运行,并从那里开始工作。

blah,blahs非常敏感:)

答案 2 :(得分:0)

要正确回答这个问题,将有助于了解AS400正在使用的“SQL”的味道。 AS400本身只是一个服务器。 AS400可以与许多数据库风格一起使用,例如DB2,MS SQL Server,Oracle等......

快速尝试一下,不知道我会说你需要在你的日期值附近放置哪种SQL风格,这样它们就不会被视为数值。

WHERE DATE&gt; ='20080101' AND DATE&lt; ='20090101'