1

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

请指导。

4

2 回答 2

3

您需要合并所有表格以获得该大纲:

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

编辑:更新以用零替换空值。请参阅ifnull 的文档

于 2012-05-16T10:29:27.923 回答
0

Join 将处理它:

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;
于 2012-05-16T10:39:53.297 回答