Si vous exécutez cette requête
SELECT 'test-a1' AS name1, 'test-a2' AS name2
le résultat sera une sélection d'une ligne avec deux colonnes ayant ces valeurs:
test-a1, test-a2
Comment puis-je modifier la requête ci-dessus pour avoir une sélection avec plusieurs lignes, par exemple.
test-a1, test-a2
test-b1, test-b2
test-c1, test-c2
Je sais comment faire cela avec UNION mais j’estime qu’il existe un moyen plus simple de le faire.
PS. Désolé pour une question aussi fondamentale, il est très difficile de google.
UNION ALL est le meilleur choix. C'est plus rapide que UNION et vous aurez des lignes mutuellement exclusives.
SELECT 'test-a1' AS name1, 'test-a2' AS name2
UNION ALL
SELECT 'test-b1', 'test-b2'
UNION ALL
SELECT 'test-c1', 'test-c2'
Le mot-clé Values peut être utilisé comme ci-dessous.
select * from
(values ('test-a1', 'test-a2'), ('test-b1', 'test-b2'), ('test-c1', 'test-c2')) x(col1, col2)
Extension de la réponse de @openshac pour Oracle, car le code mentionné ci-dessous fonctionne pour 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
Vous pouvez utiliser une table temporaire, la remplir avec vos résultats, puis la sélectionner
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;
Cela va retourner
name1 name2
==================
test_a test_b
test_c test_d
test_e test_f
test_g test_h
test_i test_j
J'aimerais entendre si quelqu'un a une meilleure solution. Dans le passé, j'ai utilisé ceci:
Select top 3 'Hardcode'
from tableWithLotsOfRows
Souhaitez-vous changer d'abc, avec 123?
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
cela devrait retourner quelque chose comme:
TestA1, Test-B1
TestA2, Test-B2
TestA3, Test-B3
dans MySQL, vous pouvez utiliser l'union
select * from
(select 2006 as year union
select 2007 as year union
select 2008
) as years