[英]SQL VIEW only returning first record
我不確定這里發生了什么。 我創建了一個 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;
當我嘗試針對此視圖使用 select 時,它只會返回第一條記錄:
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 記錄的視圖嗎? 還是我只是錯誤地使用了視圖?
你正在做一個沒有GROUP BY
的SUM
。 SUM
是一個聚合 function ,它只對一組行有意義。 如果您沒有指定任何要分組的列,則默認是對所有行求和,這意味着您只會得到一個結果。
如果您希望TRequest
中的每一列都有一行,請嘗試將GROUP BY TRequest.id
添加到您的視圖定義中。
默認join
是一個inner join
,所以這一行實際上可以過濾掉行:
JOIN User ON TRequest.author_id = User.id
如果將其替換為:
LEFT JOIN User ON TRequest.author_id = User.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.