我不确定这里发生了什么。我创建了一个 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 BY
。 SUM
是一个聚合函数,仅对一组行有意义。如果您没有指定任何分组依据的列,则默认情况下会对所有行进行求和,这意味着您只会得到一个结果。
如果您希望 TRequest
中的每一列占一行,请尝试将 GROUP BY TRequest.id
添加到您的 View 定义中。
关于mysql - SQL VIEW 只返回第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553548/