我试图解决的情况是:对于表中的每一行,可能存在来自第二个表的另一行,因此我需要来自第一个表的行的所有数据和来自第二个表的行的数据(如果存在).
我知道我可以使用数据结构作为主变量来收集表中一行的所有数据.所以,我的选择是这样的:
select t1.* ,t2.* into :dst1 ,:dst2 from table1 t1 left join table2 t2 on t2.key=t1.key ;
其中dst1和dst2分别是数据结构,如table1和table2记录的格式.很简单.
现在,重点是当第二个表中不存在该键的行时如何捕获空结果.在这种情况下,我希望初始化相应的数据结构,但是合并一次只能在一个字段上工作,而我无法找到另一个解决方案.
有没有办法获得这个结果?
任何帮助,将不胜感激!
谢谢
1> jmarkmurphy..:
解决这个问题的一种方法是使用指标变量.它看起来像这样:
dcl-ds hs Qualified; field1 ... field2 ... endds; dcl-s hsind Int(5) Dim(2); exec sql select * into :hs:hsind from table fetch first row only;
注意,:hs和:hsind之间没有逗号(,),因为这是同一个变量赋值的一部分.:hsind是一个指示符变量,在这种情况下是一个Int(5)
与主机数据结构具有相同元素数的数组:hs有字段.如果:hs中相关字段中的值为good,则指示符变量将包含0;如果为null,则指示符变量将包含-1.所以在我们上面的例子中:如果hs.field1是好的,而hs.field2是null,那么hsind(1)= 0,并且hsind(1)= -1.其他值表示其他内容,如数据映射错误(-2)或字符串截断(正数字符串的原始长度).
所以在你的例子中,使用这样的东西:
select t1.* ,t2.* into :dst1:dst1ind ,:dst2:dst2ind from table1 t1 left join table2 t2 on t2.key=t1.key ;
dst1ind
如果Int(5)具有与dst1
子场相同数量的元素,则数组在哪里,类似于dst2ind
.然后在您选择之后,只需检查dst2ind(1) >= 0
,您就有了一个很好的选择.请注意,您需要确保select into
只返回一行,否则您将收到相关错误.
- 随机文章
- 热门文章
- 热评文章
- 暂停并继续秒表
- 自学微信小程序从零到一:项目构建后http请求封装
- 为什么我的总价格应为11时打印为0.0
- 基础档案设置包括哪些内容
- 为什么电脑开机风扇转一下就停了
- Chapter 3: Built-in Data Structures, Functions, and Files 个人理解与问题
- iptables:无链/目标/匹配错误(使用docker网络创建)
- 无法从主机访问DockerizedLoopback4应用程序