我有三个表,我想在它们之间执行联接。
第一个表看起来像(命名用户)
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 JOIN
比 RIGHT JOIN
直观得多,因为它将所有行保留在 first 表中。
关于mysql - 表之间的 SQL 右连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47693248/