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 つの例にすぎません。)