mysql - SQL VIEW 只返回第一条记录

标签 mysql sql join view

我不确定这里发生了什么。我创建了一个 MySQL View 并从 4 个不同的表中获取一些数据,但它似乎只返回第一条记录。

CREATE OR REPLACE VIEW request_view AS
  SELECT
    TRequest.id,
    TRequest.minutes_required,
    TRequest.expires_at,
    User.name AS author,
    TRequest.abstract_text,
    TRequest.full_text,
    TGroup.name AS tgroup,
    SUM(TOrder.minutes) AS total_minutes
  FROM
    TRequest

  JOIN User ON TRequest.author_id = User.id
  LEFT JOIN TGroup ON TRequest.group_id = TGroup.id
  LEFT JOIN TOrder ON TRequest.id = TOrder.request_id

  ORDER BY TRequest.created_at;

当我尝试选择此 View 时,它只会返回第一条记录:

mysql> select id from request_view;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

mysql> select id from request_view where id=2;
Empty set (0.00 sec)

我有 30 个 TRequest 行...我是否可以让 View 返回所有 TRequest 记录?或者我只是错误地使用了 View ?

最佳答案

您正在执行SUM,但没有使用GROUP BYSUM 是一个聚合函数,仅对一组行有意义。如果您没有指定任何分组依据的列,则默认情况下会对所有行进行求和,这意味着您只会得到一个结果。

如果您希望 TRequest 中的每一列占一行,请尝试将 GROUP BY TRequest.id 添加到您的 View 定义中。

关于mysql - SQL VIEW 只返回第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553548/

相关文章:

sql - rails 数据库 :seed unknown attribute

sql - 如何在 PostgreSQL 查询中显示行号?

MySQL 按第一个表中匹配的行排序,然后休息

mysql - 左/右连接问题

mysql - 带条件的 LEFT JOIN

sql - MySQL 评分系统(从两个表计算平均值)

mysql - 如何在mysql中加入没有公共(public)字段的表?

mysql - 提高查询性能以仅更新 1 列而不是 3 列

mysql - SQL查询以获取指定月份的记录

mysql - 统计并显示每条记录数