2016-08-20 12 views
0

私はDBSの過程で、現在と私はインライン・ビューに取り組んでいます:私は、クエリを実行するとMySQLのインライン表示「未知のフィールド」

SELECT userId, firstname, lastname, gender 
FROM 
(SELECT COUNT(dvdId) dvdId, u.userId 
FROM userDVD 
JOIN users u ON userDVD.userId = u.userId 
GROUP BY userId) as T 
WHERE gender = 'F'; 

それは、フィールドリストのエラー、未知の列を返します。指定しようとすると

u.firstname, u.lastname, u.gender 

私は同じエラーを返します。何かご意見は?

+2

あなたのクエリは意味をなさない。サンプルデータと望ましい結果は、あなたがしたいことを伝えるのに役立ちます。 –

答えて

0

Drewが派生テーブルTを持っているのは正しいですが、あなたがコースにいるときに役立ついくつかの詳細を追加しようとします。

  • あなたが派生テーブルT
  • 外側のクエリ(第一選択)
  • 内部クエリ(第2ブラケットで選択)
  • 内側クエリはユーザのためのuのテーブルエイリアスを使用しています。
  • 内クエリの最終列は、外側のクエリがのみ2列内のクエリの最終的なレコードセットを使用するように制約されているのでuserDvdテーブルとのuserId
  • にdvdIdsのカウントであるdvdIdがために利用可能です選択したものには、エラーを受け取った名字、性別、性別は含まれません。

クエリを同じにしたいが、それらの列を使用する場合は、派生テーブルをユーザーテーブルに戻して、必要な列を取得することができます。技術は、元のテーブルに参加する

SELECT userId, firstname, lastname, gender 
FROM 
    (SELECT COUNT(dvdId) dvdId, u.userId 
    FROM userDVD 
    JOIN users u ON userDVD.userId = u.userId 
    GROUP BY userId) as T 
    INNER JOIN users u2 
    ON t.user_id = u2.user_id 
WHERE gender = 'F'; 

あなたは大きなテーブルの上にある凝集を最適化したり、重複またはそのような何かを探すために持っているときに最適です。このような。しかし、あなたのケースでは、あなたは本当にただ、このような結果セットで必要なすべての列に集約し、単一のクエリを必要とする:

SELECT 
    u.userId, u.firstname, u.lastname, u.gender, COUNT(d.dvdId) as DVDCount 
FROM 
    userDVD d 
    JOIN users u 
    ON d.userId = u.userId 
WHERE u.gender = 'F' 
GROUP BY 
    u.userId, u.firstname, u.lastname, u.gender 
; 
1
SELECT T.userId, T.firstname, T.lastname, T.gender 
FROM (
SELECT users.userId, users.firstname, users.lastname, users.gender 
FROM userDVD 
JOIN users ON userDVD.userId = users.userId 
WHERE gender = 'F' GROUP BY userId 
) as T; 

私はそれを介して働いていたと私は実現しなかったことが判明なぜなら、元のselectステートメントで指定する必要があるインラインビューのエイリアスが必要だったからです。このコンセプトは私のコースでは悲しいことではありませんでした。役に立つと思うヒントと失礼なコメントを書いた人に感謝します。だから、ありがとうドリューとマット

関連する問題