从3个表中获取没有冗余的表 - SQLite

时间:2012-05-16 10:23:06

标签: sql sqlite select

我想从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();

请指导。

2 个答案:

答案 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;