Как выбрать несколько строк, заполненных константами? - PullRequest
139 голосов
/ 04 февраля 2010

Выбор констант без обращения к таблице совершенно допустим в выражении SQL:

SELECT 1, 2, 3

Результирующий набор, который возвращает последний, представляет собой одну строку, содержащую значения. Мне было интересно, если есть способ выбрать несколько строк одновременно, используя константное выражение, что-то вроде:

SELECT ((1, 2, 3), (4, 5, 6), (7, 8, 9))

Я бы хотел что-то подобное, что работает и возвращает набор результатов с 3 строками и 3 столбцами.

Ответы [ 14 ]

0 голосов
/ 13 июля 2018

В MySQL вы можете сделать: values (1,2), (3, 4);

mysql> values (1,2), (3, 4);
+---+---+
| 1 | 2 |
+---+---+
| 1 | 2 |
| 3 | 4 |
+---+---+
2 rows in set (0.004 sec)

В MySQL 8 также возможно дать имена столбцов:

mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt (a, b, c, d);
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
0 голосов
/ 31 мая 2016

Этот способ может помочь вам

SELECT   TOP 3
         1 AS First, 
         2 AS Second, 
         3 AS Third 
FROM     Any_Table_In_Your_DataBase

Any_Table_In_Your_DataBase: любая таблица, которая содержит более 3 записей, или использовать любую системную таблицу. Здесь мы не имеем никакого отношения к данным этой таблицы.

Вы можете вносить изменения в набор результатов, объединяя столбец с первым, вторым и третьим столбцами из таблицы Any_Table_In_Your_DataBase.

0 голосов
/ 04 сентября 2015

Вот как это сделать, используя возможности XML в DB2

SELECT *
FROM
XMLTABLE ('$doc/ROWSET/ROW' PASSING XMLPARSE ( DOCUMENT '
<ROWSET>
  <ROW>
    <A val="1" /> <B val="2" /> <C val="3" />
  </ROW>
  <ROW>
    <A val="4" /> <B val="5" /> <C val="6" />
  </ROW>
  <ROW>
    <A val="7" /> <B val="8" /> <C val="9" />
  </ROW>
</ROWSET>
') AS "doc"
   COLUMNS 
      "A" INT PATH 'A/@val',
      "B" INT PATH 'B/@val',
      "C" INT PATH 'C/@val'
) 
AS X
;
0 голосов
/ 15 августа 2014

в Oracle

SELECT
  CASE
    WHEN level = 1
    THEN 'HI'
    WHEN level = 2
    THEN 'BYE'
  END TEST
FROM dual
  CONNECT BY level <= 2;
...