PHP连接两个DB2资源语句

时间:2011-04-20 19:39:21

标签: php sql join db2

我有两个查询,具有相同的[分组依据]字段,但不同的(总和)计算字段。

我想要:

  1. 将[查询#2] [字段3]添加到     [查询#1] [字段4],每一个     记录

  2. 创建一个新数组以便以后检索     数据,有[A1],[A2],[A3],[B4]。

  3. 然而,对于这两个方面,我需要知道记录的顺序完全相同。可能会从第二个资源语句中“选择”该记录,以便通过所有3个键值将其连接到原始记录。

    $conn_resource = db2_connect ( "*LOCAL", "", "" );
    
    $sql1 = "SELECT [A1], [A2], [A3], SUM([A4]) FROM [MyFile] WHERE [G] > 5 GROUP BY [A1], [A2], [A3] ";
    $stmt1 = db2_prepare ( $conn_resource, $sql1 );
    
    $sql2 = "SELECT [B1], [B2], [B3], SUM([B4]) FROM [MyFile] WHERE [G] > 5 GROUP BY [B1], [B2], [B3] ";
    $stmt2 = db2_prepare ( $conn_resource, $sql2 );
    
    if (! db2_execute ( $stmt1 ) || ! db2_execute ( $stmt2 )) {
       //failure
    }
    
    while ( $row = &db2_fetch_array ( $stmt1 ) ) {
        $sqlStatementTwoRow = db2_fetch_array ( $stmt2 );
        $row[4] = $row[3] + $sqlStatementTwoRow[4];
    }
    

    上述示例在理论上应该有效,但我没有确认$ stmt2的记录与$ stmt1的记录完全相同。


    修改 提供的答案似乎是解决方案,我越来越多地将该解决方案迁移到我的真实SQL语句中。

    一旦我完成它,我将发布使用这个想法的完整的实时SQL。

1 个答案:

答案 0 :(得分:2)

这可以更好地在数据库中实现,作为一个语句使用相关子查询将外部结果集显式连接到内部结果,然后计算总数。

我不确定下面的查询是否完全遵循您的业务规则,但希望此示例将向您展示如何从单个SQL语句中哄骗更多工作。

WITH outerquery ( a1, a2, a3, a4sum ) AS
( 
   SELECT a1, a2, a3, SUM( a4 ) FROM outerTable WHERE g > 5 GROUP BY a1, a2, a3 
)

SELECT o.a1, o.a2, o.a3, 
     o.a4sum + o.a3 + 
     ( SELECT SUM ( i.b4 ) FROM innerTable i 
       WHERE i.b1 = o.a1 AND i.b2 = o.a2 AND i.b3 = o.a3 AND g > 5
     ) AS totalaandb
FROM outerquery o
;