我有这个问题。
SELECT distinct c.reportingDate, c.clientId
FROM clients AS c
WHERE NOT EXISTS
( SELECT 1
FROM accounts_europe AS e
WHERE e.reportingDate = c.reportingDate
AND e.clientId = c.clientId
union
SELECT 1 -- line A. unexpected select error
FROM accounts_usa AS u
WHERE u.reportingDate = c.reportingDate
AND u.clientId = c.clientId
) ;
当在mysql工作台上执行它时,它会显示一个语法错误,在a行显示“unexpected select”。
但是,由于查询是正确的,所以当我执行它时,它确实会执行并返回正确的结果。
当我试图创建一个包含完全相同内容的过程时,它无法编译。源代码如下:
CREATE PROCEDURE `proc_sample`()
BEGIN
SELECT distinct c.reportingDate, c.clientId
FROM clients AS c
WHERE NOT EXISTS
( SELECT 1
FROM accounts_europe AS e
WHERE e.reportingDate = c.reportingDate
AND e.clientId = c.clientId
union
SELECT 1 -- line A. unexpected select error
FROM accounts_usa AS u
WHERE u.reportingDate = c.reportingDate
AND u.clientId = c.clientId
) ;
END
显示的消息是“对象的ddl语句包含语法错误”,这是我做错了什么还是mysql工作台的bug?
2条答案
按热度按时间yqlxgs2m1#
您的查询在语法上是正确的。可能是工作台的bug。谈到存储过程,您应该能够使用该查询创建它。尝试使用下面的查询创建sp。在我的例子中,我可以使用这个创建sp。复制此查询在工作台中打开一个新的查询编辑器并将其粘贴到那里,选择all并按
Ctrl + Shift + Enter
```USE
YOUR_DB
;DROP procedure IF EXISTS
proc_sample
;DELIMITER $$
USE
YOUR_DB
$$CREATE DEFINER=
admin
@%
PROCEDUREproc_sample
()BEGIN
SELECT distinct c.reportingDate, c.clientId
FROM clients AS c
WHERE NOT EXISTS
( SELECT 1
FROM accounts_europe AS e
WHERE e.reportingDate = c.reportingDate
AND e.clientId = c.clientId
END$$
DELIMITER ;
31moq8wy2#
出现这个错误是因为mysql语法错误已经被修复了。改用最新的工作台版本(目前是wb8.0.11rc,请参阅下载页上的“开发版本”)。这对你应该有用。
()mysql workbench使用antlr4解析sql代码。这需要mysql语法来生成解析器。