从多个表中的多个列的平均值创建新表

时间:2013-02-10 00:47:03

标签: sql identifier cross-join

我有以下查询:

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含糊不清。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用其来自的表的名称限定教师。

例如:instreffective_average.Instructor

如果你不这样做,SQL将猜测它来自哪个查询表,但是如果有2个或更多可能性,它不会尝试猜测并告诉你它需要帮助决定。

答案 1 :(得分:1)

您的查询很可能以多种方式失败。

除了关于表格限定列名的@Patashu told you之外,您还需要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条件,则会得到CROSS JOIN,这意味着每个表的每一行都将与每个其他表的每一行组合。在大多数情况下非常昂贵的废话。

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