web-dev-qa-db-ja.com

複数のハードコーディングされたSQL行を選択する方法

このクエリを実行する場合

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。このような基本的な質問で申し訳ありませんが、グーグルで検索するのは非常に難しいです。

43
Eugene

UNION ALLが最善の策です。 UNIONよりも高速で、相互に排他的な行があります。

22
HLGEM

Valuesキーワードは次のように使用できます。

select * from 
(values ('test-a1', 'test-a2'), ('test-b1', 'test-b2'), ('test-c1', 'test-c2')) x(col1, col2)
40
Muthu
SELECT 'test-a1' AS name1, 'test-a2' AS name2 
UNION ALL 
SELECT 'test-b1', 'test-b2'
UNION ALL 
SELECT 'test-c1', 'test-c2'
36
openshac

以下のコードが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
5
Alok Chaudhary

一時テーブルを使用し、それを結果で埋めてから選択することができます

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
4
ajaali

誰もがより良い解決策を持っていると聞きたいです。過去に私はこれを使用しました:

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
2
TizzyFoe

mysqlではunionを使用できます

select * from 
    (select 2006 as year union
     select 2007 as year union
     select 2008
    ) as years
0
vencedor