Можно ли сделать выбор без таблицы с несколькими строками?
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 | с