如果您执行此查询
SELECT 'test-a1' AS name1, 'test-a2' AS name2
结果将是一行选择,其中两列具有以下值:
test-a1, test-a2
如何修改上述查询以选择多行,例如
test-a1, test-a2
test-b1, test-b2
test-c1, test-c2
我知道如何使用UNION执行此操作,但我觉得存在一种更简单的方法。
PS。对于这样一个基本问题很抱歉,google很难。
答案 0 :(得分:38)
值关键字可以使用如下。
select * from
(values ('test-a1', 'test-a2'), ('test-b1', 'test-b2'), ('test-c1', 'test-c2')) x(col1, col2)
答案 1 :(得分:36)
SELECT 'test-a1' AS name1, 'test-a2' AS name2
UNION ALL
SELECT 'test-b1', 'test-b2'
UNION ALL
SELECT 'test-c1', 'test-c2'
答案 2 :(得分:21)
UNION ALL是最好的选择。它比UNION快,你将拥有互斥的行。
答案 3 :(得分:5)
为oracle扩展answer of @openshac,因为下面提到的代码适用于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
答案 4 :(得分:4)
您可以使用临时表,将其填满结果,然后从中进行选择
create table #tmpAAA (name1 varchar(10), name2 varchar(10))
insert into #tmpAAA (name1, name2)
values ('test_a', 'test_b'),
('test_c', 'test_d'),
('test_e', 'test_f'),
('test_g', 'test_h'),
('test_i', 'test_j');
select * from #tmpAAA;
这将返回
name1 name2
==================
test_a test_b
test_c test_d
test_e test_f
test_g test_h
test_i test_j
答案 5 :(得分:2)
我很想听到有人有更好的解决方案。过去我用过这个:
Select top 3 'Hardcode'
from tableWithLotsOfRows
你介意用123来切换abc吗?
select top 3
'test-A'+convert(varchar, row_number() over (order by PrimaryKey)),
'test-B'+convert(varchar, row_number() over (order by PrimaryKey))
from tableWithLotsOfRows
应返回类似:
TestA1, Test-B1
TestA2, Test-B2
TestA3, Test-B3
答案 6 :(得分:0)
在mysql中,您可以使用union
select * from
(select 2006 as year union
select 2007 as year union
select 2008
) as years
答案 7 :(得分:0)
从MySQL 8.0.19开始,可以做到
SELECT column_0 AS name1, column_1 AS name2 FROM (VALUES ROW('test-a1','test-a2'), ROW('test-b1','test-b2'), ROW('test-c1','test-c2') ) AS hardcodedNames
返回哪个
name1 name2 ================== test-a1 test-a2 test-b1 test-b2 test-c1 test-c2
列名注释
从VALUES输出的表中的列具有隐式命名的列column_0,column_1,column_2,依此类推,始终以0开头。
此处的文档:skip。
答案 8 :(得分:0)
以下代码在 MSSQL 环境中对我有用:
SELECT Name1,Name2 FROM(VALUES ('test-a1', 'test-a2'),
('test-b1', 'test-b2'),
('test-c1', 'test-c2'))AS Test(Name1,Name2)
输出:
Name1 Name2
------- -------
test-a1 test-a2
test-b1 test-b2
test-c1 test-c2