0

私は次のクエリを持っています:

CREATE TABLE Professor_Average

SELECT Instructor, SUM( + instreffective_avg + howmuchlearned_avg + instrrespect_avg)/5
FROM instreffective_average, howmuchlearned_average, instrrespect_average
GROUP BY Instructor;

それはInstructor曖昧だと私に言っています。これを修正するにはどうすればよいですか?

4

2 に答える 2

2

インストラクターを、元のテーブルの名前で修飾します。

例えば:instreffective_average.Instructor

これを行わないと、SQLはクエリのどのテーブルからのものであるかを推測しますが、2つ以上の可能性がある場合は、推測を試みず、決定の助けが必要であると通知します。

于 2013-02-10T00:50:32.260 に答える
1

あなたのクエリは、複数の理由で失敗する可能性があります。

@Patashuがテーブル修飾列名についてあなたに言ったことに加えてJOIN、テーブルを適切に扱う必要があります。Instructorあなたのクエリはあいまいなので(情報が不足しているため)、次のようになります。

SELECT ie.Instructor
      ,SUM(ie.instreffective_avg + h.howmuchlearned_avg + ir.instrrespect_avg)/5
FROM   instreffective_average ie
JOIN   howmuchlearned_average h  USING (Instructor)
JOIN   instrrespect_average   ir USING (Instructor)
GROUP  BY Instructor

読みやすくするために、テーブルのエイリアスを追加しました。

これは、3 つのテーブルのそれぞれに、Instructorそれらを結合できる列があることを前提としています。JOIN条件がなければCROSS JOIN、すべてのテーブルのすべての行が他のすべてのテーブルのすべての行と結合されることを意味します。ほとんどの場合、非常に高価なナンセンスです。

USING (Instructor)の短い構文ですON ie.Instructor = h.Instructor。また、結合された (必然的に同一の) 列を 1 つに折りたたみます。Instructorしたがって、私の例のSELECTリストでは、テーブル修飾なしで逃げることができます。すべての RDBMS がこの標準 SQL 機能をサポートしているわけではありませんが、詳しい情報を提供できませんでした。

于 2013-02-10T01:04:39.173 に答える