MySQLのFull Outer Joinの代替案を知りたいです。ユニオンを介して実行できることはわかっていますが、要件が少し複雑であるため、機能していません。master(branch_id,purchase_mindate,purchase_billvalue) と transfer(branch_id,tra_gtr_date,tra_travalue) の 2 つのテーブルがあり、両方の id フィールドがほぼ同じになります。次に、2 つのテーブルを条件で結合して、値id,sum(billvalue),sum(travalue)を取得する必要があります
- Mindate=現在の日付
- Gtrdate=現在の日付
- マスターのテーブルに値がなく、転送テーブルに値が含まれている場合、転送の値を含める必要があります
- マスターのテーブルに値が含まれているが転送に含まれていない場合、マスターの値を表示する必要があります。
ユニオン、ジョインなどを試しましたが、どこかで何か間違ったことをしていることはわかっていますが、これを手伝ってください。
以下のクエリを使用しました。
select purchase_master.branch_id, sum(purchase_billvalue) as billvalue, sum(tra_value) as travalue
from purchase_master
join purchase_transfer on purchase_master.branch_id=purchase_transfer.branch_id
where purchase_mindate=CURDATE() and tra_gtr_date=CURDATE()
group by branch_id
2 つのテーブルに現在の日付が含まれている場合にのみ値を取得しますが、1 つのテーブルに含まれていて他のテーブルに含まれていない場合は値を取得しません
テーブルのスクリーンショットを添付しました。
マスターテーブル
転送テーブル
以下のクエリを試しましたが、結果は空です。
select pm.branch_id,pm.purchase_billvalue, pt.tra_value from purchase_master as pm
left outer join purchase_transfer as pt on pm.branch_id=pt.branch_id
where pm.purchase_mindate=CURDATE() and pt.tra_gtr_date=CURDATE()
union
select pm.branch_id,pm.purchase_billvalue, pt.tra_value from purchase_master as pm
right outer join purchase_transfer as pt on pm.branch_id = pt.branch_id
where pm.purchase_mindate=CURDATE() and pt.tra_gtr_date=CURDATE()
結果が sum(billvalue) sum(travalue) group by branch_id として必要です。
- 2 つのテーブルに currentdate データが含まれている場合
- 現在の日付データが含まれている場合