我的MySQL查询有什么问题?

时间:2011-04-28 15:46:57

标签: php mysql sql

SELECT E.id_employee,E.name,E.age,E.wage,D.name,
    CASE (SELECT COUNT(*) FROM manages M 
        WHERE M.id_employee=E.id_employee) 
        WHEN 1 THEN 'Chief' 
        WHEN 0 THEN '-'
    END CASE
FROM Employee E 
INNER JOIN work_in 
INNER JOIN Department D

它给出了错误:

无法连接:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在附近使用正确的语法'CASE FROM Employee E INNER JOIN work_in INNER JOIN Department D'第5行

我在这里缺少什么?请立即帮助。

6 个答案:

答案 0 :(得分:4)

在END

之后删除最后一个CASE关键字

答案 1 :(得分:3)

'END'后没有'CASE'

SELECT E.id_employee,E.name,E.age,E.wage,D.name,
                CASE (SELECT COUNT(*) FROM manages M WHERE M.id_employee=E.id_employee) 
                    WHEN 1 THEN 'Chief' 
                    WHEN 0 THEN '-'
                END
FROM Employee E INNER JOIN work_in INNER JOIN Department D

答案 2 :(得分:3)

从END后删除单词CASE。

答案 3 :(得分:2)

你混淆了CASE StatementCASE expression的语法。第一个用于存储过程,第二个用于SQL语句。

CASE表达

SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;

CASE声明

CASE case_value
    WHEN when_value THEN statement_list
    [WHEN when_value THEN statement_list] ...
    [ELSE statement_list]
END CASE

或者正如手册所说的那样

  

注意

     

CASE语句的语法   存储程序内部使用的不同   略微来自SQL CASE   第11.4节中描述的表达式,   “控制流功能”。案子   语句不能有ELSE NULL   子句,它以END结束   CASE而不是END。

因此,在您的情况下,CASE之后没有END

答案 4 :(得分:1)

inner joinON条款缺少USING()条件。

SELECT E.id_employee,E.name,E.age,E.wage,D.name,
                CASE (SELECT COUNT(*) FROM manages M WHERE M.id_employee=E.id_employee) 
                    WHEN 1 THEN 'Chief' 
                    WHEN 0 THEN '-'
                END
            FROM Employee E 
               INNER JOIN work_in w
                  ON e.id_employee=w.id.employee
               INNER JOIN Department D
                  ON w.id_department=D.id_department

答案 5 :(得分:1)

将其更改为:

"SELECT E.id_employee,E.name,E.age,E.wage,D.name,
  CASE (SELECT COUNT(*) FROM manages M WHERE M.id_employee=E.id_employee)
    WHEN 1 THEN 'Chief'                     
    WHEN 0 THEN '-'                 
  END              
FROM Employee E 
INNER JOIN work_in w ON (w.id = e.work_id)
INNER JOIN Department D ON (D.id = e.department_id)"

警告
如果您执行的inner join没有条件,它实际上会转换为full outer join
这意味着如果您运行以下查询:

SELECT * FROM a
INNER JOIN b
INNER JOIN c

其中表a,b和c各有100行,结果集中总共会有1,000,000行,列出a,b和c的每个可能组合。
在99,999%的案例中,这绝对不是你想要的。