【发布时间】:2019-09-27 17:20:16
【问题描述】:
enter image description here 你好,
我需要从 3 个表中读取数据,然后我必须将这些记录处理到目标系统。我写了一个如下所示的选择查询来获取数据。
表 A 有 A1,A2,A3,A4,A5 等字段
表 B 有 B1,B2,B3 等字段
表 C 有 C1,C2,C3 等字段
Except函数用于从select查询结果中剔除少数记录。
select A1,A2,A3,A4,A5,B1,B2,B3,C1,C2,C3
from tableA
left outer join tableB
on (tableA.A1=tableB.B1) and (tableA.A2=tableB.B2)
left outer join tableC
on (tableA.A1=tableC.C1)
where ORDERDATE='01/01/2019'
Except
select A1,A2,A3,A4,A5,B1,B2,B3,C1,C2,C3
from tableA
left outer join tableB
on (tableA.A1=tableB.B1) and (tableA.A2=tableB.B2)
left outer join tableC
on (tableA.A1=tableC.C1)
where ORDERDATE='01/01/2019'
and tableA.A3='Y'
现在这个查询工作正常并返回如下所示的 1000 条记录。
(或者请检查附件/下面的链接以获取正确对齐的输出图像)
Output data for above query -Image-Attachment
+------------+--------------+---------------+----------+------+------+------+----------+------+------+----------+
| A1 (order) | A2(Sequence) | A3(orderDate) | A4 | A5 | B1 | B2 | B3 | C1 | C2 | C3 |
+------------+--------------+---------------+----------+------+------+------+----------+------+------+----------+
| 1111 | 1 | 1/1/2019 | wqe | 3e | 1111 | qq | 1/1/2019 | 1111 | 1 | 1/1/2019 |
| 1111 | 2 | 1/1/2019 | qe | 4r | 1111 | aa | 1/1/2019 | 1111 | 2 | 1/1/2019 |
| 1111 | 3 | 1/1/2019 | qwe | | 1111 | ss | 1/1/2019 | 1111 | 3 | 1/1/2019 |
| 2222 | 1 | 1/1/2019 | | tg | 2222 | cc | 1/1/2019 | 2222 | 1 | 1/1/2019 |
| 3333 | 1 | 1/1/2019 | eqw | | 3333 | vv | 1/1/2019 | 3333 | 1 | 1/1/2019 |
| 3333 | 2 | 1/1/2019 | qweq | 5y | 3333 | bb | 1/1/2019 | 3333 | 2 | 1/1/2019 |
| 3333 | 3 | 1/1/2019 | | 5u | 3333 | nn | 1/1/2019 | 3333 | 3 | 1/1/2019 |
| 3333 | 4 | 1/1/2019 | qwe | | 3333 | mm | 1/1/2019 | 3333 | 4 | 1/1/2019 |
| 4444 | 6 | 1/1/2019 | | 4g | 4444 | mn | 1/1/2019 | 4444 | 6 | 1/1/2019 |
| 9999 | 7 | 1/1/2019 | wqw | 8m | 9999 | yu | 1/1/2019 | 9999 | 7 | 1/1/2019 |
+------------+--------------+---------------+----------+------+------+------+----------+------+------+----------+
但我想修改我的选择查询以一次获取一个订单的所有记录。这样我就可以处理这些记录并更改这些记录的状态。然后下次运行查询时,它将获取下一个订单“2222”的记录,依此类推..
所以从上面的例子来看:如果我运行选择查询,我必须只获取订单 1111 的记录(前 3 条记录)。
谢谢。
【问题讨论】:
-
示例数据未显示此内容,但您的数据是否有多个 A2(Sequence) 用于 A1(订单)
-
问题:为什么是
EXCEPT?为什么不只是SELECT ... WHERE tableA.A3 <> 'Y'?有办法做到这一点(可能最好使用数据更改表),但是为什么? -
您好专家,请建议如何修改我的 SELECT 查询以实现上述要求。谢谢你。 YQ
-
为什么要一次处理一个订单?你想完成什么?
-
您似乎正试图在某种程度上缩短您的查询,因为提供的 SQL 不会产生显示的输出。问题是 A2 不等于 B2,并且 tableC 中有多个行与 tableA 中的 A1 匹配。如果您不向我们提供真实情况,我们真的无能为力。
标签: db2 ibm-midrange