2012-11-06 138 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列表,请参阅别名。 –