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

我添加了表别名以使其更易于阅读。

这假设三个表中的每一个都有一个Instructor可以连接它们的列。如果没有JOIN条件,您会得到 a CROSS JOIN,这意味着每个表的每一行都将与每个其他表的每一行组合在一起。在大多数情况下非常昂贵的废话。

USING (Instructor)是 . 的简短语法ON ie.Instructor = h.Instructor。它还将连接的(必须相同的)列折叠成一列。因此,在我的示例中,如果列表中Instructor没有表限定,您将侥幸逃脱。SELECT并非每个 RDBMS 都支持此标准 SQL 功能,但您未能提供更多信息。

于 2013-02-10T01:04:39.173 回答