Можно ли сделать выбор без таблицы с несколькими строками?

SELECT без FROM Предложение получает нам несколько столбцов без запроса таблицы:

SELECT 17+23, REPLACE('bannanna', 'nn', 'n'), RAND(), CURRENT_TIMESTAMP;

Как мы можем написать запрос, который приводит к нескольким строкам без ссылки на таблицу? В основном, злоупотребление SELECT превратить его в оператор определения данных. Результат может иметь один столбец или несколько столбцов.

Меня больше всего интересует нейтральный ответ СУБД, но другие (например, основанные на UNPIVOT) добро пожаловать. Я хотел бы собрать как можно больше способов сделать это. За этим вопросом нет применения техники; это скорее теоретический, чем практический.

3 ответа

Решение

Используйте СОЮЗ:

SELECT 1
UNION
SELECT 2

Похоже на это в MySQL:

+---+
| 1 |
+---+
| 1 | 
| 2 | 
+---+

использование UNION ALL чтобы избежать потери неуникальных строк.

Для этого вы можете использовать конструкторы табличных значений, если они поддерживаются вашей РСУБД. Вот пример от мистера Селко

SELECT X.*
FROM   (VALUES (1, 3.07766, 6.31371, 12.7062, 63.65600),
               (2, 1.88562, 2.91999, 4.30265, 9.92482),
               (3, 1.63774, 2.35336, 3.18243, 5.84089)) AS X (A, B, C, D, E); 

T-SQL, UNPIVOT можно транспонировать данные из строк в столбцы. Множественные развороты эквивалентны декартову произведению каждого непивотного столбца.

SELECT N, S
  FROM (SELECT 1 aa, 2 ab, 3 ac, 'a' ba, 'b' bb, 'c' bc) s
  UNPIVOT (N for Num in (aa,ab,ac)) AS t
  UNPIVOT (S for Str in (ba,bb,bc)) AS u

Результат:

N | S
- + -
1 | 
1 | б
1 | с
2 | 
2 | б
2 | с
3 | 
3 | б
3 | с

Другие вопросы по тегам