我想从3个不同的表中检索Name的列值
Table1 contains Name
Table2 contains Name, BAmt
Table3 contains Name, RAmt
现在我想从所有3个表中获取名称。 假设该表包含这些值
Table1: Table2: Table3:
Name Name BAmt Name RAmt
1. Jack 1.Alice 1000 1.Mark 5000
2. Mark 2.Jack 500 2.Tarzon 1000
3. Ricky 3.Beth 5500
4.Jack 100
现在我想要一个包含所有名称的表(没有任何名称的重复)。理想情况下,新表应包含这些值
Name BAmt RAmt
1.Jack 500 100
2.Mark 5000
3.Ricky
4.Alice 1000
5.Tarzon 1000
6.Beth 5500
这里它忽略了重复,但从表中获取了那些列的必要值。 我应该使用什么样的选择语句。 这是我想的,但我认为这是错误的做法:
Statement statement1 = db.createStatement("SELECT DISTINCT Name,BAmt,RAmt FROM Table1,Table2,Table3");
statement1.prepare();
statement1.execute();
请指导。
答案 0 :(得分:3)
您需要union all所有表格才能获得该大纲:
select Name,
ifnull (sum(BAmt), 0) BAmt,
ifnull (sum(RAmt), 0) RAmt
from
(
select Name,
null BAmt,
null RAmt
from Table1
union all
select Name,
BAmt,
null
from Table2
union all
select Name,
null,
RAmt
from Table3
) allTables
group by Name
order by Name
编辑:更新以用零替换空值。 请参阅Documentation for ifnull。
答案 1 :(得分:0)
加入会照顾它:
select name, bamt, ramt from table1 t1 left outer join table2 t2 on t1.name = t2.name left outer join table3 on t1.name = t3.name order by name;