MySQL - 如何使用分页从两个表中获取所有记录?

标签 mysql sql join

我们有两个表credit_pointsdebit_points,其中user_id是引用。我们关心的是我们希望通过带有限制和偏移量的created_date DESC 以单个查询顺序获取所有记录。请找到表格列表和输出表格。

信用点

+----+----------+--------------+---------------------+
| id | user_id  | credit_value |  created_date       |
+----+----------+--------------+---------------------+
|  1 | 111      | 13           | 2020-01-08 10:20:26 |
|  2 | 111      | 11           | 2020-01-09 11:20:23 |
|  3 | 111      | 7            | 2020-01-09 13:25:12 |
|  4 | 111      | 20           | 2020-01-13 12:25:17 |
+----+----------+--------------+---------------------+

借记点

+----+----------+--------------+---------------------+
| id | user_id  | debit_value  |  created_date       |
+----+----------+--------------+---------------------+
|  1 | 111      | 13           | 2020-01-09 10:20:25 |
|  2 | 111      | 11           | 2020-01-11 11:18:54 |
|  3 | 111      | 15           | 2020-01-14 13:50:24 |
|  4 | 111      | 5            | 2020-01-14 15:23:12 |
+----+----------+------------+-----------------------+

输出应该是:

+----------+--------------+---+------------------------------+
| user_id  | credit_value | debit_value | created_date       |
+----------+--------------+-------------+--------------------+
| 111      | NULL         | 5           |2020-01-14 15:23:12 |
| 111      | NULL         | 15          |2020-01-14 13:50:24 |
| 111      | 20           | NULL        |2020-01-13 12:25:17 |
| 111      | NULL         | 11          |2020-01-11 11:18:54 |
| 111      | 7            | NULL        |2020-01-09 13:25:12 |
| 111      | 11           | NULL        |2020-01-09 11:20:23 |
| 111      | NULL         | 13          |2020-01-09 10:20:25 |
| 111      | 13           | NULL        |2020-01-08 10:20:26 |
+----------+--------------+-------------+-----+--------------+

查询1:

SELECT 
   c.user_id, c.credit_value, d.debit_value, d.created_date
FROM credit_points c 
    RIGHT JOIN debit_points d ON(c.user_id=d.user_id)
WHERE c.user_id=111
ORDER BY c.created_date,d.created_date DESC 
limit 20;

我知道上面的查询是完全错误的。请帮助我以正确的方式获取它。

查询2:

SELECT user_id,credit_value, created_date
FROM credit_points where user_id=111
UNION ALL
SELECT user_id,debit_value,created_date
FROM debit_points where user_id=111 ORDER BY created_date DESC

上面的查询(Query2)工作正常,但我们无法获取debit_value列。 Credit_value 和 debit_value 都位于一列中。

最佳答案

您可以使用 UNION 将两个表中的数据合并到派生表中,然后使用所需的偏移量对其执行 SELECT:

SELECT * FROM 
(
    SELECT user_id, credit_value, NULL AS debit_value, created_date FROM muvi_credit_points
    UNION ALL
    SELECT user_id, NULL AS credit_value, debit_value, created_date FROM muvi_debit_points
) t
WHERE user_id = 111
ORDER BY created_date DESC
LIMIT 0, 20

当然,如果需要,可以在内部 SELECT 语句中按 user_id 进行过滤。

关于MySQL - 如何使用分页从两个表中获取所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59735010/

相关文章:

mysql - 连接表以查找对应的列 SQL

mysql - 关于自连接的sql问题

MySQL - 插入语句需要我输入主键

MySQL - 获取所有带有标签的帖子(不同的)

mysql - 通过 JOIN 问题添加了 COUNT 两次

mysql - DBI->connect 在终端中执行时有效,但在浏览器中执行时无效

mysql - 如何删除每列中只有空值的行?

python - Django MySQL 创建表时出错

database - 无法从 mysqldump.exe 解析版本号

mysql - 连接 MySQL 表以包含多个重复条目