Jak wybrać wiele wierszy wypełnionych stałymi?

Wybieranie stałych bez odwoływania się do tabeli jest całkowicie legalne w instrukcji SQL:

SELECT 1, 2, 3

Zbiór wyników, który zwraca ten ostatni, jest pojedynczym wierszem zawierającym wartości. Zastanawiałem się, czy istnieje sposób na zaznaczenie wielu wierszy naraz za pomocą wyrażenia stałego, coś w rodzaju:

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

Chciałbym coś takiego jak powyżej, które działa i zwraca zestaw wyników z 3 wierszami i 3 kolumnami.

Author: Blagovest Buyukliev, 2010-02-04

12 answers

SELECT 1, 2, 3
UNION ALL SELECT 4, 5, 6
UNION ALL SELECT 7, 8, 9
 156
Author: Dewfy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-04 16:15:49

W PostgreSQL możesz zrobić:

SELECT  *
FROM    (
        VALUES
        (1, 2),
        (3, 4)
        ) AS q (col1, col2)

W innych systemach wystarczy użyć UNION ALL:

SELECT  1 AS col1, 2 AS col2
-- FROM    dual
-- uncomment the line above if in Oracle
UNION ALL
SELECT  3 AS col1, 3 AS col2
-- FROM    dual
-- uncomment the line above if in Oracle

W Oracle, SQL Server i PostgreSQL, można również wygenerować zestawy rekordów o dowolnej liczbie wierszy (dostarczanych ze zmienną zewnętrzną):

SELECT  level
FROM    dual
CONNECT BY
        level <= :n

W Oracle,

WITH    q (l) AS
        (
        SELECT  1
        UNION ALL
        SELECT  l + 1
        FROM    q
        WHERE   l < @n
        )
SELECT  l
FROM    q
-- OPTION (MAXRECURSION 0)
-- uncomment line above if @n >= 100

W SQL Server,

SELECT  l
FROM    generate_series(1, $n) l

W PostgreSQL.

 89
Author: Quassnoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-04 16:20:00

Wypróbuj klauzulę connect by w oracle, coś takiego

select level,level+1,level+2 from dual connect by level <=3;

Aby uzyskać więcej informacji na temat klauzuli connect by, kliknij ten link: USUNIĘTY adres URL, ponieważ strona oraclebin jest teraz złośliwa.

 11
Author: Sushant Butta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-18 12:45:59

Następujące polecenie {[1] } działa dla mnie w PostgreSQL:

VALUES (1,2,3), (4,5,6), (7,8,9)
 6
Author: Tregoreg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-28 16:39:44

Oto jak wypełniam statyczne dane w Oracle 10+ za pomocą zgrabnej sztuczki XML.

create table prop
(ID NUMBER,
 NAME varchar2(10),
 VAL varchar2(10),
 CREATED timestamp,
 CONSTRAINT PK_PROP PRIMARY KEY(ID)
);

merge into Prop p
using (
select 
  extractValue(value(r), '/R/ID') ID,
  extractValue(value(r), '/R/NAME') NAME,
  extractValue(value(r), '/R/VAL') VAL
from
(select xmltype('
<ROWSET>
   <R><ID>1</ID><NAME>key1</NAME><VAL>value1</VAL></R>
   <R><ID>2</ID><NAME>key2</NAME><VAL>value2</VAL></R>
   <R><ID>3</ID><NAME>key3</NAME><VAL>value3</VAL></R>
</ROWSET>
') xml from dual) input,
 table(xmlsequence(input.xml.extract('/ROWSET/R'))) r
) p_new
on (p.ID = p_new.ID)
when not matched then
insert
(ID, NAME, VAL, CREATED)
values
( p_new.ID, p_new.NAME, p_new.VAL, SYSTIMESTAMP );

Scalanie wstawia tylko wiersze, których brakuje w oryginalnej tabeli, co jest wygodne jeśli chcesz ponownie uruchomić skrypt Wstaw.

 4
Author: Nicholas Sushkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-22 22:25:07
SELECT * 
FROM DUAL 
CONNECT BY ROWNUM <= 9;
 3
Author: grokster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-08 15:34:02

Wyrocznia. Dzięki temu postowi PL / SQL-użyj zmiennej "List" w gdzie w klauzuli

Zestawiłem moją przykładową instrukcję, która jest łatwa do ręcznego wprowadzania wartości (jest ponownie używana w testowaniu aplikacji przez testerów):

WITH prods AS (
    SELECT column_value AS prods_code 
    FROM TABLE(
        sys.odcivarchar2list(
            'prod1', 
            'prod2'
        )
    )
)
SELECT * FROM prods
 2
Author: Petr Szturc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-05 10:51:47

Opcja dla DB2:

SELECT 101 AS C1, 102 AS C2 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 201 AS C1, 202 AS C2 FROM SYSIBM.SYSDUMMY1 UNION ALL
SELECT 301 AS C1, 302 AS C2 FROM SYSIBM.SYSDUMMY1
 1
Author: Vitaliy Ulantikov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-20 09:31:53

W MySQL możesz zrobić: values (1,2), (3, 4);

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

W MySQL 8 możliwe jest również podanie nazw kolumn:

mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt (a, b, c, d);
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
 1
Author: Benedikt Köppel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-13 08:51:13

W Oracle

SELECT
  CASE
    WHEN level = 1
    THEN 'HI'
    WHEN level = 2
    THEN 'BYE'
  END TEST
FROM dual
  CONNECT BY level <= 2;
 0
Author: Mike Robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-14 22:22:35

Oto Jak to zrobić używając funkcji 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
Author: Stavr00,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-04 14:30:48

Ten sposób może Ci pomóc]}

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

Any_Table_In_Your_DataBase: każda tabela, która zawiera więcej niż 3 rekordy, lub używa dowolnej tabeli systemowej. Tutaj nie mamy obaw o dane z tej tabeli.

Możesz wprowadzić zmiany w zestawie wyników, łącząc kolumnę z pierwszą, drugą i trzecią kolumną z tabeli Any_Table_In_Your_DataBase.

 0
Author: Lali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-31 15:00:24