2012-11-06 114 views
1
運行MySQL查詢

我寫的查詢在什麼應該是標準的SQL,並在MySQL測試它們。錯誤PostgreSQL中

現在,當我嘗試在PostgreSQL可以運行在他們我得到的所有類型的錯誤,我真的不明白。 這裏的原始查詢,在MySQL的工作:

CREATE VIEW popularCSsections AS (
    SELECT sect.csid, COUNT(sc.sid) as numStudents 
    FROM courseSection sect, studentCourse sc, department d 
    WHERE sect.csid = sc.csid 
     AND sect.dcode = d.dcode 
     AND dname = "Computer Science" 
    GROUP BY sect.csid 
    HAVING numStudents > 2 
); 

給出了這樣的錯誤:

psql:a2tables:60: ERROR: column "Computer Science" does not exist 
LINE 8: AND department.dname = "Computer Science" 
           ^

能否請你幫我理解錯誤的性質和幫助我解決這些問題?


其他問題:

CREATE VIEW popularCSsections AS (
SELECT sect.csid, COUNT(sc.sid) as numStudents 
FROM courseSection sect, studentCourse sc, department d 
WHERE sect.csid = sc.csid 
    AND sect.dcode = d.dcode 
    AND dname = 'Computer Science' 
    GROUP BY sect.csid 
    HAVING numStudents > 2 
); 

錯誤:

psql:a2tables:70: ERROR: column "numstudents" does not exist 
LINE 8: HAVING numStudents > 2 
       ^
+2

在標準SQL中,字符串使用單引號「''引用,而不是雙引號'」'試試:'AND department.dname ='Computer Science'' – Lee

+0

「Standard SQL」。Ha。* gigglesnort *可悲的是,標準的SQL不是特別輕便,便攜SQL並不總是標準的SQL:S –

回答

2

需要引用字符串用單引號:

AND dname = 'Computer Science' 

這裏發生的是,雙引號被解釋爲「身份ifier引號「,表示您希望將內容解釋爲數據庫標識符(列或表名稱)。

+0

感謝這工作就像一個魅力! 現在有另一個錯誤PSQL拋出我...任何線索(?我把它添加到原單問題) – indieman

+1

使用'HAVING COUNT(sc.sid)> 2'。顯然,MySQL是未映別名到GROUP BY。 –

+1

@LarryLustig的MySQL是*映射別名到GROUP BY,即使它不是由該規範允許,你不能在標準的SQL WHERE子句,GROUP BY等在SELECT列表,請參閱別名。 –