2011-07-01 4 views
0

私はここで何が起こっているのか分かりません。私はMySQLのビューを作成し、4つの異なるテーブルからいくつかのデータを取得するが、それは最初のレコードを返すようです。SQL VIEWのみ最初のレコードを返す

私は、このビューに対して選択しようとすると、それは最初のレコードだけを返します
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; 

:私は30のTRequest行を持って

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) 

を...とにかくそこにある私は、ビューがすべてを返すように得ることができますTRequest記録?または単にビューを間違って使用していますか?

+0

TRequest、TGroup、およびTorderにも対応するレコードがある行はいくつありますか?私は1つを賭けている。質問にすべてのテーブルの内容を含めることができますか? – JohnFx

答えて

1

あなたはなしSUMをやっている:あなたがそれを置き換えるとどう

JOIN User ON TRequest.author_id = User.id 

GROUP BYSUMは、行のグループに対してのみ意味を持つ集計関数です。グループ化する列を指定しない場合、デフォルトではすべての行にわたって合計が取られます。結果は1つだけです。

各列に1つの行をTRequestにする場合は、ビュー定義にGROUP BY TRequest.idを追加してみてください。

+0

それはまさにそれでした。これは私の初めてのstackoverflow.comを使用していたとこれは驚くべきだった。皆さんありがとうございました! – Ben

+0

問題ありません@ベン!幸せに発展しています:) –

+0

+1よく目に付きます – Andomar

0

デフォルトjoininner joinあるので、このラインは、実際に行をフィルタリングすることができます

LEFT JOIN User ON TRequest.author_id = User.id 
関連する問題