I have a working query that I need to repeat a few times, however I'm getting syntax errors on the UNION ALL:
我有一个工作查询,我需要重复几次,但是我在UNION中得到的语法错误都是:
Working query:
工作查询:
set @num := 0, @group := '';
select person, `group`, age
from
(
select person, `group`, age,
@num := if(@group = `group`, @num + 1, 1) as row_number,
@group := `group` as dummy
from mytable
order by `Group`, Age desc
) as x where x.row_number <= 2;
SQL小提琴
Failing UNION ALL (Gets a syntax error):
失败的UNION ALL(获得语法错误):
set @num := 0, @group := '';
(
select person, `group`, age
from
(
select person, `group`, age,
@num := if(@group = `group`, @num + 1, 1) as row_number,
@group := `group` as dummy
from mytable
order by `Group`, Age desc
) as x where x.row_number <= 2;
)
UNION ALL
(
select person, `group`, age
from
(
select person, `group`, age,
@num := if(@group = `group`, @num + 1, 1) as row_number,
@group := `group` as dummy
from mytable
order by `Group`, Age desc
) as x where x.row_number <= 2;
)
SQL小提琴
(The UNIONed queries are just duplicates of the original query for testing purposes)
(统一查询只是用于测试的原始查询的副本)
3 个解决方案
#2
1
set @num := 0, @group := '';
select person, `group`, age
from
(
select person, `group`, age,
@num := if(@group = `group`, @num + 1, 1) as row_number,
@group := `group` as dummy
from mytable
order by `Group`, Age desc
) as x where x.row_number <= 2
UNION ALL
select person, `group`, age
from
(
select person, `group`, age,
@num := if(@group = `group`, @num + 1, 1) as row_number,
@group := `group` as dummy
from mytable
order by `Group`, Age desc
) as x where x.row_number <= 2;
#3
1
Remove the outermost parentheses. The SELECT statement should start with the SELECT keyword, not an open paren.
删除最外层的括号。SELECT语句应该以SELECT关键字开头,而不是open paren。
#1
#2
1
set @num := 0, @group := '';
select person, `group`, age
from
(
select person, `group`, age,
@num := if(@group = `group`, @num + 1, 1) as row_number,
@group := `group` as dummy
from mytable
order by `Group`, Age desc
) as x where x.row_number <= 2
UNION ALL
select person, `group`, age
from
(
select person, `group`, age,
@num := if(@group = `group`, @num + 1, 1) as row_number,
@group := `group` as dummy
from mytable
order by `Group`, Age desc
) as x where x.row_number <= 2;
#3
1
Remove the outermost parentheses. The SELECT statement should start with the SELECT keyword, not an open paren.
删除最外层的括号。SELECT语句应该以SELECT关键字开头,而不是open paren。