【问题标题】:My SQL Command Isn't Properly EndedMysql 命令未正确结束
【发布时间】:2023-03-23 03:49:01
【问题描述】:

我在试图找出错误所在的位置时遇到了麻烦。据我所知,一切看起来都是正确的:

SELECT  a.department_name
FROM department a
OUTER JOIN (SELECT department_id, 
            NVL((TO_CHAR(MAX(salary + commission)), '$9,990.00'), '$0.00') as "Maximum Total Pay",
            NVL((TO_CHAR(MAX(hire_date)), 'DD-MON-YYYY'), '01-JAN-3000') as "Maximum Hire Date",
            NVL((TO_CHAR(MIN(hire_date)), 'DD-MON-YYYY'), '01-JAN-3000') as "Minimum Hire Date",
            COUNT(*) AS NUMBER_OF_EMPLOYEES
            FROM employee c
            WHERE employee_id IS NOT NULL
            GROUP BY c.department_id)
ON          a.department_id = c.department_id  
ORDER BY    a.department_name;

我收到 SQL 命令未正确结束的错误。任何帮助将不胜感激。

谢谢!

编辑:我无法选择两个正确答案,因为这两个答案都帮助我找到了正确的解决方案。感谢所有帮助过的人。

【问题讨论】:

  • 但你可以赞成这两个答案。

标签: sql oracle


【解决方案1】:

我想,空值可能来自您的子查询,但不是来自部门,所以使用LEFT OUTER JOIN。

但主要问题是由于括号

NVL((TO_CHAR(MAX(hire_date)), 'DD-MON-YYYY'), '01-JAN-3000') 语句,

两用:

NVL(TO_CHAR(MAX(hire_date), 'DD-MON-YYYY'), '01-JAN-3000') 改为从左侧删除第 1 个和第 5 个括号。

【讨论】:

  • 谢谢@barbaros,这有助于清理错误!
【解决方案2】:

看来您需要为要加入的子查询添加别名,并添加关键字LEFT

SELECT  a.department_name
FROM department a
LEFT OUTER JOIN (SELECT department_id, 
            NVL((TO_CHAR(MAX(salary + commission)), '$9,990.00'), '$0.00') as "Maximum Total Pay",
            NVL((TO_CHAR(MAX(hire_date)), 'DD-MON-YYYY'), '01-JAN-3000') as "Maximum Hire Date",
            NVL((TO_CHAR(MIN(hire_date)), 'DD-MON-YYYY'), '01-JAN-3000') as "Minimum Hire Date",
            COUNT(*) AS NUMBER_OF_EMPLOYEES
            FROM employee c
            WHERE employee_id IS NOT NULL
            GROUP BY c.department_id) c1
ON          a.department_id = c1.department_id  
ORDER BY    a.department_name;

我称它为 c1 只是为了让您注意到别名。

【讨论】:

  • 我用你在 Oracle 中的添加更新了它,但它仍然在 OUTER JOIN 行返回相同的错误。
  • 看到更新添加了“LEFT”一词,但现在收到一条错误消息,提示我在连接下方的行中缺少右括号,我什至复制了上面的完整代码。我已经审查了这两个集合和看起来完全一样。会不会是系统出错了?
  • 也许您也在寻找 NVL2 功能而不是 NVL? NVL 仅支持 2 个参数,而您传递了 3 个。感谢您的编辑@jon-heller
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 2013-01-05
  • 1970-01-01
相关资源
最近更新 更多