我不确定这里发生了什么。我已经创建了一个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?
答案 0 :(得分:1)
你正在SUM
没有GROUP BY
。 SUM
是一个聚合函数,只对一组行有意义。如果您没有指定任何要分组的列,则默认为对所有行取总和,这意味着您只能获得一个结果。
如果您想在TRequest
中为每列添加一行,请尝试将GROUP BY TRequest.id
添加到视图定义中。
答案 1 :(得分:0)
默认join
是inner join
,因此该行实际上可以过滤掉行:
JOIN User ON TRequest.author_id = User.id
如果用以下内容替换它会发生什么:
LEFT JOIN User ON TRequest.author_id = User.id