加入和子选择

时间:2014-09-24 15:10:53

标签: join db2 subquery

我需要摆脱我的iSeries DB2查询子选择。在下面的查询中,我需要将ABAN8和MAPA8上匹配的F0116中的ALADD1和ALADD2(地址1和2)转换为一条记录。 ABAN8是送货地址ID,MAPA8是开票地址ID。 F0116保存这些地址ID的值。

当前查询:

SELECT T1.ABAN8,T2.MAPA8,T3.ALADD1,T3.ALADD2,
(SELECT ALADD1 FROM F0116 WHERE MAPA8 = ALAN8) AS ALADD101,
(SELECT ALADD2 FROM F0116 WHERE MAPA8 = ALAN8) AS ALADD201
FROM F0101 T1
LEFT JOIN F0150 T2 ON ABAN8 = MAAN8
LEFT JOIN F0116 T3 ON ABAN8 = ALAN8

结果如下:

ABAN8,  MAPA8,  ALADD1,             ALADD2,     ALADD101,           ALADD201,
100,    200,    555 SHIPPING STR,   SUITE B,    555 BILLING STR,    SUITE C,
101,    201,    556 SHIPPING STR,   SUITE B,    556 BILLING STR,    SUITE C,
102,    202,    557 SHIPPING STR,   SUITE B,    557 BILLING STR,    SUITE C

但这是一个非常简单的例子。实际上有六个地址字段,因此效率很高。如果没有每个地址2字段的子选择,我该如何做到这一点?

提前致谢。

1 个答案:

答案 0 :(得分:1)

由于你并没有真正包含一个架构,并且这些名称根本没有帮助,我只是假设哪些字段可以做什么(它们可能是错误的)。< / p>

你可以在LEFT JOIN中再次添加表格,然后按照这样的方式提取地址:

SELECT
     T1.ABAN8
    ,T2.MAPA8
    ,SHIP.ALADD1
    ,SHIP.ALADD2
    ,BILL.ALADD1
    ,BILL.ALADD2
FROM F0101 T1
LEFT JOIN F0150 T2
  ON T1.ABAN8 = T2.MAAN8
LEFT JOIN F0116 AS SHIP
  ON T1.ABAN8 = SHIP.ALAN8
LEFT JOIN F0116 AS BILL
  ON T1.ABAN8 = BILL.ALAN8