2

こんにちはスタックオーバーフローの新参者です。これを正しく提示していない場合は申し訳ありません。

Google、W3schools を使用し、SQL に関する FQA を読みました。

WAMP2.0 で SQL コマンド ラインを使用して SQL を実行しています。私は現在、最小大学DBを作成することを目的としたプロジェクトを行っています。学生、成績、プログラム、モジュールなど

タスクの 1 つは、すべての学生、モジュール、対応する成績を一覧表示することです。これを行うには、JOIN コマンドを使用して、Students テーブルからすべての名前を選択し、対応するすべてのモジュール + レコード テーブルから成績を選択しようとしています。

+------------+-------+------------+-----------------+
| Student_id | Name  | DOB        | Address         |
+------------+-------+------------+-----------------+
|    4665236 | Paddy | 1985-09-18 | 123 Fake Street |
|    5665236 | Paul  | 1984-06-12 | Good manlane    |
|    6665236 | John  | 1984-03-09 | Docotor town    |
|    7665236 | Aidan | 1983-07-09 | Banker worlds   |
|    8665236 | Joe   | 1983-07-09 | 24 hitherwood   |
+------------+-------+------------+-----------------+

+------------+--------+------+-------+
| Student_id | Mod_id | GPA  | Grade |
+------------+--------+------+-------+
|    4655236 |   2222 | 3.84 | A-    |
|    5655236 |  11111 | 3.44 | B+    |
|    6655236 |  33333 | 3.24 | B     |
|    7655236 |  44444 | 2.45 | C-    |
|    8655236 |  44444 | 2.45 | C-    |
+------------+--------+------+-------+

学生テーブルの主キーは Student_id INT 11 です

レコードの PRIMARY KEY は (Student_id,Mod_id) です

個々の SELECT FROM 、ステートメントは両方のテーブルで正常に機能します。

使用すると問題が発生します

SELECT students.Name, records.Grade
FROM students
INNER JOIN records
ON students.Student_id=Student_id
ORDER BY students.Name

次のエラーが表示されます

エラー 1052 (23000): on 句の列 'Student_id' があいまいです

私が試した驚くほど速い応答に感謝します

SELECT 生徒.名前, records.Grade FROM 生徒 INNER JOIN レコード ON 生徒.生徒 ID=記録.生徒 ID ORDER BY 生徒.名前;

And Got ---- 空のセット (0.00 秒) ?

4

3 に答える 3

1

その列Student_Idをエイリアスで修飾する必要があります。たとえば、句でrecords.studentIdあいまいにならないようにするか、次のようにします。ON

SELECT s.Name, r.Grade
FROM students AS s
INNER JOIN records AS r ON s.Student_id= r.Student_id
ORDER BY s.Name
于 2013-03-15T14:29:13.607 に答える
1

Student_id列は 2 つのテーブルに存在するため、あいまいさを避けるために列のテーブル名を指定する必要があります。

SELECT students.Name, records.Grade
FROM   students
       INNER JOIN records
          ON students.Student_id = records.Student_id -- << THIS
ORDER  BY students.Name
于 2013-03-15T14:29:24.350 に答える
0

列名にあいまいなフラグが付けられている理由は、それぞれにStudent_idフィールドがある2つの異なるテーブルがあるためです。テーブルをそれ自体に結合できるため、フィールドの最初のインスタンスに識別子がある場合でも、両方に1つ必要です。

次のコードを試してください。

SELECT students.Name, records.Grade
FROM students
INNER JOIN records
ON students.Student_id=records.Student_id
ORDER BY students.Name

次のコマンドを使用して、コードの見栄えを良くする場合は、テーブルのエイリアスを作成することもできます。

SELECT s.Name, r.Grade
FROM students s
INNER JOIN records r
ON s.Student_id=r.Student_id
ORDER BY s.Name

ただし、これは、学生IDが両方のテーブルで一致する場合にのみ機能します。提示したデータの例では、一致するレコードはありません。4665236!= 4655236

于 2013-03-15T14:34:06.050 に答える