【问题标题】:PHP join two DB2 resource statementsPHP join 两个 DB2 资源语句
【发布时间】:2011-04-20 19:39:21
【问题描述】:

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

我想要:

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

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

但是,对于这两个,我需要知道记录的顺序完全相同。也许从第二个资源语句中“选择”记录,以通过所有 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。

【问题讨论】:

    标签: php sql join db2


    【解决方案1】:

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

    我不确定下面的查询是否完全符合您的业务规则,但希望此示例将向您展示如何从单个 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
    ; 
    

    【讨论】:

    • 你的 'o' 别名有什么特别之处吗,还是你忘了把它放进去?
    • 抱歉...我忘记为外部查询添加 o 别名。它现在就在那里。
    猜你喜欢
    • 2021-10-10
    • 2012-05-19
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多