如何选择几个硬编码的SQL行?

Eug*_*ene 47 mysql sql oracle

如果您执行此查询

SELECT 'test-a1' AS name1, 'test-a2' AS name2
Run Code Online (Sandbox Code Playgroud)

结果将是一行选择,其中两列具有以下值:

test-a1, test-a2
Run Code Online (Sandbox Code Playgroud)

如何修改上述查询以选择多行,例如

test-a1, test-a2
test-b1, test-b2
test-c1, test-c2
Run Code Online (Sandbox Code Playgroud)

我知道如何用UNION做到这一点,但我觉得有一种更简单的方法可以做到这一点.

PS.很抱歉这样一个基本问题,谷歌很难.

小智 41

值关键字可以使用如下.

select * from 
(values ('test-a1', 'test-a2'), ('test-b1', 'test-b2'), ('test-c1', 'test-c2')) x(col1, col2)
Run Code Online (Sandbox Code Playgroud)

  • 此代码段无法在MuSQL 5.6.25中运行.这是5.7的新功能吗? (4认同)
  • 这个例子在 MS SQL Server 中对我来说运行良好,但在 Oracle 中则不然。 (2认同)

ope*_*hac 37

SELECT 'test-a1' AS name1, 'test-a2' AS name2 
UNION ALL 
SELECT 'test-b1', 'test-b2'
UNION ALL 
SELECT 'test-c1', 'test-c2'
Run Code Online (Sandbox Code Playgroud)


HLG*_*GEM 23

UNION ALL是最好的选择.它比UNION快,你将拥有互斥的行.

  • @HLGEM 相反,UNION ALL 生成重复行,而 UNION 生成互斥行。 (2认同)

Alo*_*ary 5

扩展@openshac对oracle 的答案,因为下面提到的代码适用于oracle:

SELECT 'test-a1' AS name1, 'test-a2' AS name2 from dual 
UNION ALL 
SELECT 'test-b1', 'test-b2' from dual
UNION ALL 
SELECT 'test-c1', 'test-c2' from dual
Run Code Online (Sandbox Code Playgroud)


小智 5

以下代码在 MSSQL 环境中适用于我:

SELECT Name1,Name2 FROM(VALUES  ('test-a1', 'test-a2'),
                                   ('test-b1', 'test-b2'),
                                   ('test-c1', 'test-c2'))AS Test(Name1,Name2)
Run Code Online (Sandbox Code Playgroud)

输出:

Name1   Name2
------- -------
test-a1 test-a2
test-b1 test-b2
test-c1 test-c2
Run Code Online (Sandbox Code Playgroud)