Union和Into的使用不正确

时间:2014-05-26 17:44:10

标签: mysql

我在MySQL中有一个查询

 select group_concat(users) into searchedUserIds from
    ((select user_id users from user_tbl)  union
    (select user_id  users from user_details )) a;

它给出错误:incorrect usage of union and into。我想要做的是将所有用户ID都放入变量searchedUserIdsgroup_concat会将所有ID放在一个列中,然后我可以将其保存到searchedUserIds变量中。此查询写在一个给我这个错误的函数内。如果我单独运行它,这个联合查询会给我结果,但在函数内部我得到错误。

变量声明:

declare
searchedUserIds varchar(5000);

1 个答案:

答案 0 :(得分:0)

某些版本的MySQL存在错误。如果解析器看到类似SELECT ... INTO ... UNION SELECT ...的内容,那么您遇到的错误消息假定将关闭。也就是说,它应该阻止在INTO的任何分支中使用UNION而不是最后一个分支。但是,检查的编写方式,它(在您的MySQL版本中)无法解释UNION在子查询中并且INTO在其外部的可能性。

错误报告位于http://bugs.mysql.com/bug.php?id=32858;正如你所看到的,这个错误是在5年半前修复的,所以最好的解决办法可能只是升级到一个不那么古老的MySQL版本。 (如果你已经使用了相对较新版本的MySQL,那么他们可能会有一个新的回归?)

如果您不希望升级,或者您需要比您愿意升级更快地解决此问题,那么您可以重写存储过程以避免INTO,或重写您的查询以避免UNION。在您的情况下,我认为user_id中的user_details中的每个user_tbl也会出现在SELECT GROUP_CONCAT(users) INTO searchedUserIds FROM user_tbl; 中,因此您可能只能写:

{{1}}

<!/ P>