6

マルチテーブルクエリに少し問題があります。(RDBMS:アクセス)

データベース スキーマは次のとおりです。 (このクエリでは、S_Cards、Books、Authors、Students テーブルのみが使用されます) S_Cards は Student book order (in library) です。

DBスキーム

クエリ: 学生の間で最も人気のある著者と、その著者の図書館で注文された本の数を選択します。

注文と著者のリストを 1 つのクエリで取得できますが、次のようになります。

SELECT 
    Students.FirstName & " " & Students.LastName AS [Student], 
    Books.Name AS [Book], Authors.FirstName & " " & Authors.LastName AS [Author]
FROM 
    Students, 
    Books, 
    S_Cards, 
    Authors
WHERE 
    S_Cards.ID_Student = Students.ID 
AND S_Cards.ID_Book = Books.ID 
AND Books.ID_Author = Authors.ID
ORDER BY Authors.LastName

結果 (申し訳ありませんが、ロシア語です):

クエリ結果

なぜ私はこのように COUNT と GROUP BY ができないのか分かりません:

SELECT 
    Students.FirstName & " " & Students.LastName AS [Student], 
    Books.Name AS [Book], 
    COUNT(Authors.FirstName & " " & Authors.LastName) AS [Number of books]
FROM Students, Books, S_Cards, Authors
WHERE 
    S_Cards.ID_Student = Students.ID 
AND S_Cards.ID_Book = Books.ID 
AND Books.ID_Author = Authors.ID
GROUP BY 3

「Authors.FirstName & " " & Authors.LastName」は静的関数またはグループの一部ではないというエラーが表示されます。

質問:

  1. JOIN を使用せずに、GROUP BY、SELECT、UNION のみでこのクエリを実行する方法はありますか?
  2. 2 番目のクエリの問題は何ですか?
4

3 に答える 3

1

解決策(問題の古いリビジョンから抽出):

SELECT TOP 1 Author, COUNT(Book) AS [Number of books] FROM
(
    SELECT 
        Students.FirstName & " " & Students.LastName AS [Student], 
        Books.Name AS [Book], 
        Authors.FirstName & " " & Authors.LastName AS [Author]
    FROM 
        Students, 
        Books, 
        S_Cards, 
        Authors
    WHERE 
        S_Cards.ID_Student = Students.ID AND
        S_Cards.ID_Book = Books.ID AND
        Books.ID_Author = Authors.ID
    ORDER BY Authors.LastName
)
GROUP BY Author
ORDER BY 2 DESC
于 2015-09-22T02:03:36.280 に答える
0

SQL Serverの文字列連結演算子+は ではありません&。また、集計関数ではないものでグループ化する必要があります。

SELECT Students.FirstName + ' ' + Students.LastName AS [Student]
     , Books.Name AS [Book]
     , COUNT(Authors.FirstName + ' ' + Authors.LastName) AS [Number of books]
  FROM Students
  JOIN S_Cards
    ON S_Cards.ID_Student = Students.ID
  JOIN BOOKS
    ON S_Cards.ID_Book = Books.ID 
  JOIN Authors
    ON Books.ID_Author = Authors.ID
 GROUP BY Students.FirstName + ' ' + Students.LastName
        , Books.Name

クエリを標準の ANSI 結合構文に変更したことに注意してください。これにより、エラーが発生しにくくなり、読みやすくなります。

考えてみると、あなたのカウントは少し奇妙に思えます。冊数じゃないのCOUNT(Books.ID)

于 2012-09-16T13:55:19.317 に答える
0

集計関数の一部ではないものはすべて GROUP BY する必要があります。

SELECT 
    Students.FirstName & " " & Students.LastName AS [Student], 
    Books.Name AS [Book], 
    COUNT(Authors.FirstName & " " & Authors.LastName) AS [Number of books]
FROM Students, Books, S_Cards, Authors
WHERE 
    S_Cards.ID_Student = Students.ID 
AND S_Cards.ID_Book = Books.ID 
AND Books.ID_Author = Authors.ID
GROUP BY Students.FirstName & " " & Students.LastName, 
    Books.Name AS [Book]

暗黙的な結合ではなく、明示的な結合の使用を開始することをお勧めします。ほとんどの場合、MS Access にはより良い選択肢があります。

<...>
FROM Students
INNER JOIN S_Cards
ON Students.ID = S_Cards.ID_Student

または

<...>
FROM Students
LEFT JOIN S_Cards
ON Students.ID = S_Cards.ID_Student

クエリ デザイン ウィンドウでは、正しい構文で JOIN を作成できます。結合フィールドをあるテーブルから次のテーブルにドラッグ アンド ドロップし、必要な結合タイプを選択するだけです。

于 2012-09-16T22:09:39.020 に答える