0

私には2つのテーブルがrsalesありrreturn、次のコードがあります。両方のテーブルに値がある場合は正常に実行されますが、問題は、それらのいずれかが空であるか、データが保存されていない場合、結果が表示されないことです。私のコードに何か問題がありますか?

$result = mysql_query("SELECT category, (SELECT SUM(s.total)-SUM(r.total) FROM rsales AS s WHERE r.pcode=s.pcode) as total, r.pcode FROM rreturn AS r GROUP BY r.pcode;");
4

1 に答える 1

0

MySQL は をサポートしていないため、FULL OUTER JOINエミュレートする必要があります。

それを行う1つの方法:

SELECT IFNULL(sr.category,ss.category) AS category
     , IFNULL(s.total,0)-IFNULL(r.total,0) AS total
  FROM (
         SELECT cr.pcode
           FROM rreturn cr
          GROUP BY cr.pcode
          UNION 
         SELECT cs.pcode
           FROM rsales cs
          GROUP BY cs.pcode
       ) c
  LEFT
  JOIN ( SELECT sr.pcode
              , MAX(sr.category) AS category
              , SUM(sr.total) AS total
           FROM rreturn sr
          GROUP BY sr.pcode
       ) r
    ON r.pcode = c.pcode
  LEFT
  JOIN ( SELECT ss.pcode
              , MAX(ss.category) AS category
              , SUM(sr.total) AS total
           FROM rsales ss
          GROUP BY ss.pcode
       ) s
    ON s.pcode = c.pcode

インライン ビューcは、rsales または rreturn に表示されるすべての pcode の完全なリストを取得します。

次に、インライン ビューrは、rreturn から各 pcode の合計を取得sし、から同じことを行いrsalesます。

次に、操作を使用してLEFT JOIN、pcode に基づいて行を一致させることができます。

(これは、指定された結果セットを返す唯一の方法ではなく、1 つの例にすぎません。)

于 2013-09-10T03:55:53.733 に答える