【问题标题】:Fetch values from 3 tables without redundancy-SQLite从 3 个没有冗余的表中获取值-SQLite
【发布时间】:2017-02-13 15:25:17
【问题描述】:

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

请指导。

【问题讨论】:

  • 你必须做一个自然加入还是给加入一个on参数?我没有得到您想要尝试的内容,因为连接将完全符合您在示例中显示的内容(即使没有不同)

标签: sql sqlite select


【解决方案1】:

你需要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

【讨论】:

  • 我只是想知道如何在有空值的地方添加一个“0”。我想在没有更新表语句的情况下这样做。将替换一个“0”上述代码中 null 的位置(我怀疑)。
  • @techie 请检查我修改后的答案。
  • 脱帽致敬!它从来没有点击过我以这种方式使用 ifnull。再次感谢。:)
【解决方案2】:

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-04-21
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多