【发布时间】:2013-09-08 07:12:20
【问题描述】:
我想知道 MySQL 中 Full Outer Join 的替代方案。我知道它可以通过联合来完成,但它不起作用,因为我的要求并不复杂,我希望如此。我有两个表 master(branch_id,purchase_mindate,purchase_billvalue) 和 transfer(branch_id,tra_gtr_date,tra_travalue) ,其中两个 id 字段几乎相同。现在我需要通过加入两个带有条件的表来获取值 id,sum(billvalue),sum(travalue)
- Mindate=当前日期
- Gtrdate=当前日期
- 如果主表没有任何值,但传输表包含,则必须包含传输的值
- 如果 master 的表包含 value 但 transfer 没有,则必须显示 master 的 value。
我尝试了联合、加入等,但没有任何帮助
我使用了以下查询,
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
仅当两个表包含当前日期时,我才会获取值,但如果一个表具有而另一个表没有,则我不会获取任何值
我附上了表格的屏幕截图。
主表
转表
我尝试了下面的查询,但结果为空,
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,
- 如果两个表包含当前日期数据
- 如果任何一个包含当前日期数据
【问题讨论】:
-
架构、输入数据、预期结果。基本练习....
-
你说的是什么意思...两个id字段几乎一样?它们是否相同?
-
只是一样,它就像外键一样工作。
-
@Ajeesh 你能发布示例数据(每个表只有几行)和所需的输出吗?
-
@Ajeesh 这个样本数据的期望输出是什么?
标签: mysql sql outer-join