2013-02-10 44 views
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是模糊的。我该如何解决?

+0

这是你的数据库试图阻止你做一些不明智的事情。规范化的原则之一是不存储计算值。如果你不明白为什么,我已经听说过关于这本书“数据库设计仅仅是人类”的好消息。 – 2013-02-10 01:01:13

+1

什么是您的数据库系统和版本? – 2013-02-10 01:01:15

回答

2

使用它来自的表格的名称限定教练。

例如:instreffective_average.Instructor

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

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的简短语法。它也将合并(必须相同)的列合并为一个。因此,在我的示例中,您将在SELECT列表中脱离没有表格资格的Instructor。并非每个RDBMS都支持这种标准SQL功能,但是您未能提供更多信息。