mysql - 表之间的 SQL 右连接

标签 mysql sql

我有三个表,我想在它们之间执行联接。

第一个表看起来像(命名用户)

id      column1
1       1
2       2
3       3

第二个表看起来像(命名交易),这里我们有一些用户的交易

user_id      transaction_date      transaction_expire
1            2017-03-31            2017-05-16
1            2017-02-28            2017-04-16 

第三个表看起来像(名为 user_logs),我们有基于天的用户日志

user_id      date          some_log_data
1            2017-03-07    1505
1            2017-03-03    1201
1            2017-03-22    942
1            2017-03-31    1490
1            2017-04-05    1490

我想根据交易了解每个用户的总和,例如:

user_id     transaction_date    transaction_expire    log
1           2017-03-31          2017-05-16            2980
1           2017-02-28          2017-04-16            6628

因此,这就是我想要为每次使用获取所有事务中的日志总和而实现的结果。

通过在 transaction_date 和 transaction_expire 之间执行此查询,我得到了一些结果,但是当我尝试求和时,结果是针对所有这些结果:

SELECT t.transaction_date, t.transaction_expire, ul.log
FROM user_logs as ul
    RIGHT JOIN transactions as t ON ul.user_id= t.user_id
WHERE ul.date BETWEEN t.transaction_date AND t.transaction_expire

这个查询给了我 7 行,这是正确的,但现在我只想找到这两个不同事务中日志的总和。

最佳答案

您的查询基本上是正确的,但您需要聚合:

SELECT t.transaction_date, t.transaction_expire, SUM(ul.log)
FROM transactions t LEFT JOIN
     user_logs ul
     ON ul.user_id = t.user_id AND
        ul.date BETWEEN t.transaction_date AND t.transaction_expire
GROUP BY t.transaction_date, t.transaction_expire;

另请注意,WHERE 子句中的条件已移至 ON 子句。我将 JOIN 切换为 LEFT JOIN。我发现 LEFT JOINRIGHT JOIN 直观得多,因为它将所有行保留在 first 表中。

关于mysql - 表之间的 SQL 右连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47693248/

相关文章:

sql - PostgreSQL:检查行是否存在或另一行是否具有特定值

c# - SqlConnection.Open() 在 .NET Core Consol 项目中挂起,但在常规 C# 控制台项目中连接正常

mysql - Sphinx 值得用于非全文搜索吗?

sql - 如何将外键约束添加到表 A (id, type) 引用两个表表 B (id, type) 或表 C (id, 类型) 中的任何一个?

mysql - 如果 mysql 中不存在,请添加一列,需要一些调试帮助

mysql - 为什么这个查询被记录为 "not using indexes"?

sql - 我应该在客户端还是在 SQL Server 中生成大量 SQL 数据?

mysql - 如何让mysql使用当前有效的linux用户作为mysql的默认用户?

php - 获取具有相同 id 的多个表的信息

mysql - 当我使用 delete 语句时,我的程序删除了所有行