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行
我在这里缺少什么?请立即帮助。
答案 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
Statement和CASE
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 join或ON
条款缺少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%的案例中,这绝对不是你想要的。