不能联合所有两个等价查询吗?

时间:2021-09-23 20:09:56

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 FIDDLE

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 FIDDLE

SQL小提琴

(The UNIONed queries are just duplicates of the original query for testing purposes)

(统一查询只是用于测试的原始查询的副本)

3 个解决方案

#1


2  

You have some extra brackets.

你有一些额外的括号。

See this SQL Fiddle

看到这个SQL小提琴

#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  

You have some extra brackets.

你有一些额外的括号。

See this SQL Fiddle

看到这个SQL小提琴

#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。