Подтвердить что ты не робот

Как выбрать несколько строк жесткого кода SQL?

Если вы выполните этот запрос

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.

4b9b3361

Ответ 1

UNION ALL - лучший выбор. Это быстрее, чем UNION, и у вас будут взаимоисключающие строки.

Ответ 2

SELECT 'test-a1' AS name1, 'test-a2' AS name2 
UNION ALL 
SELECT 'test-b1', 'test-b2'
UNION ALL 
SELECT 'test-c1', 'test-c2'

Ответ 3

Ключевое слово Values ​​можно использовать, как показано ниже.

select * from 
(values ('test-a1', 'test-a2'), ('test-b1', 'test-b2'), ('test-c1', 'test-c2')) x(col1, col2)

Ответ 4

Расширение ответа @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

Мне бы хотелось услышать, что у кого-то есть лучшее решение. Раньше я использовал это:

Select top 3 'Hardcode'
from tableWithLotsOfRows

Не могли бы вы перевести abc с 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

который должен возвращать что-то вроде:

TestA1, Test-B1
TestA2, Test-B2
TestA3, Test-B3

Ответ 6

Вы можете использовать временную таблицу, заполнить ее результатами и затем выбрать из нее

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