首页 > 解决方案 > MySQL 5.6 中的内联查询

问题描述

有人可以告诉我如何在 MySQL 5.6 中使用内联查询吗?我正在尝试做一件简单的事情!我正在尝试编写一个查询,在该查询中我从数据库中的一个表中选择并加入一个我试图动态创建的内联表。这是一个 1 列表,我无法用多行创建它。

示例内联查询

select * from (
      (select 'filename1' as file_name) as t1
      union
      (select 'filename2' as file_name) as t2
);

如果我在没有第二个 select 语句的情况下运行此查询,那么它可以工作。但是,如果我使用两个 select 语句运行它并尝试将它们联合起来,它就会崩溃并抱怨我在“as t2”附近的 SQL 语法中有错误。

任何帮助是极大的赞赏。

标签: mysqlsqlselectsubqueryunion

解决方案


显然是一个非常简单的例子,但是......查询的成员union不使用别名。但是,您正在创建的派生表union确实需要一个。所以:

select * from (
      select 'filename1' as file_name
      union all
      select 'filename2'
) t;

注意:

  • 无需union用括号将成员括起来(除非您想要单独的order by子句)

  • 无需为第二个成员中的列设置别名:无论如何,第一个查询中定义的别名优先

  • 除非您确实想删除重复项,否则请使用union all而不是union:它更有效,并且使意图明确

最后:就您的查询而言,不需要外部查询。这是等价的:

select 'filename1' as file_name
union all 
select 'filename2'

奖励:在最新版本的 MySQL 中,您可以使用values row()构造函数:

select *
from (values row('filename1'), row('filename2')) t(filename)

推荐阅读