このクエリを実行する場合
SELECT 'test-a1' AS name1, 'test-a2' AS name2
結果は、次の値を持つ2つの列を持つ1つの行選択になります。
test-a1, test-a2
上記のクエリを変更して、複数の行を選択できるようにするにはどうすればよいですか?.
test-a1, test-a2
test-b1, test-b2
test-c1, test-c2
UNIONでこれを行う方法は知っていますが、もっと簡単な方法があります。
PS。このような基本的な質問で申し訳ありませんが、グーグルで検索するのは非常に難しいです。
UNION ALLが最善の策です。 UNIONよりも高速で、相互に排他的な行があります。
Valuesキーワードは次のように使用できます。
select * from
(values ('test-a1', 'test-a2'), ('test-b1', 'test-b2'), ('test-c1', 'test-c2')) x(col1, col2)
SELECT 'test-a1' AS name1, 'test-a2' AS name2
UNION ALL
SELECT 'test-b1', 'test-b2'
UNION ALL
SELECT 'test-c1', 'test-c2'
以下のコードがOracleで機能するため、Oracleの @ openshacの答え を拡張します。
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
一時テーブルを使用し、それを結果で埋めてから選択することができます
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
誰もがより良い解決策を持っていると聞きたいです。過去に私はこれを使用しました:
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
mysqlではunionを使用できます
select * from
(select 2006 as year union
select 2007 as year union
select 2008
) as years