2013-02-10 47 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功能,但是您未能提供更多信息。