簡體   English   中英

SQL VIEW 只返回第一條記錄

[英]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 BYSUM 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM