SQL VIEW只返回第一条记录

时间:2011-07-01 21:50:01

标签: mysql sql join view

我不确定这里发生了什么。我已经创建了一个MySQL视图并从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;

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

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行......无论如何我可以获得视图以返回所有TRequest记录吗?或者我只是错误地使用View?

2 个答案:

答案 0 :(得分:1)

你正在SUM没有GROUP BYSUM是一个聚合函数,只对一组行有意义。如果您没有指定任何要分组的列,则默认为对所有行取总和,这意味着您只能获得一个结果。

如果您想在TRequest中为每列添加一行,请尝试将GROUP BY TRequest.id添加到视图定义中。

答案 1 :(得分:0)

默认joininner join,因此该行实际上可以过滤掉行:

 JOIN User ON TRequest.author_id = User.id

如果用以下内容替换它会发生什么:

 LEFT JOIN User ON TRequest.author_id = User.id