2016-09-18 111 views
0

我对SQL的查询语言比较新鲜,我需要提醒我做错了什么。我事先意识到,我的数据库结构并不是最优的,因此您在阅读我的问题时可能会想到的任何提示都将不胜感激。SQLite 3 - 将4个表连接在一起,无需重复重复记录

这里是我想要做的事:

我有四个不同的表,所有四个包含以前的交易记录信息。这些表格有三个相关的列,数量,日期和用户ID。我想从所有四列中选择数量和日期,以便输出为四行,每行保存一张表中的数量和日期。这里是如何(日期保存为长值):

表1

Row Amount Date  UserID 
1 1000 0   1  
2 2000 2674800000 1  
3 3000 5094000000 1 

表2

Row Amount Date  UserID 
1 1000 0   1 
2 2000 2674800000 1  
3 3000 5094000000 1 

输出我想

Row Amount Date   UserID 
1 1000 0   1 
2 1000 0   1 
3 2000 2674800000 1 
4 2000 2674800000 1 
5 3000 5094000000 1 
6 3000 5094000000 1 

以上是我希望在新视图中查看数据的方式,但是我得到的每个数据都有三个条目(因此,1000,2000和3000有三个条目)...如果我将其他表添加到组合中,它似乎成指数增长。

这里是我当前的SQL查询:

SELECT T.Amount, T.Date FROM (SELECT Amount, Date, UserID FROM LoanRecords) AS T JOIN (SELECT Amount, Date, UserID FROM ExpenseRecords) AS E ON T.UserID = E.UserID 

另外,如果有人可以给我如何得到这个也显示每个日期的SUM()总一些指点,那将是巨大的。

回答

2

你会使用union all

SELECT T.Amount, T.Date, T.UserID 
FROM ((SELECT Amount, Date, UserID FROM LoanRecords 
    ) UNION ALL 
     (SELECT Amount, Date, UserID FROM ExpenseRecords 
    ) 
    ) t; 

其实是不需要的子查询:

SELECT Amount, Date, UserID FROM LoanRecords 
UNION ALL 
SELECT Amount, Date, UserID FROM ExpenseRecords 
ORDER BY UserID, Date; 

我添加了ORDER BY,因为这似乎是查询的意向一部分。

您可以在任一查询中使用UNION ALL添加其他表。

+0

联盟......我应该记住这一点。非常感谢你的回答,它就像一个魅力。 –