sql >> Databáze >  >> RDS >> Oracle

Výčet řádků ve vnitřním spojení

Ke generování čísel řádků nepotřebujete vnitřní spojení s fiktivní tabulkou nebo analytickou funkci; můžete jednoduše použít connect by (a jeho odpovídající funkci úrovně) na samotné tabulce, například takto:

WITH tst_dim_ban_selected AS (SELECT 1 ban_key, 'a' cust_fullname, 3 n FROM dual UNION ALL
                              SELECT 2 ban_key, 'b' cust_fullname, 4 n FROM dual)
-- end of mimicking your table with data in it. See SQL below
SELECT db.ban_key,
       db.cust_fullname,
       LEVEL row_num
FROM   tst_dim_ban_selected db
CONNECT BY LEVEL <= db.n
           AND PRIOR db.ban_key = db.ban_key -- assuming this is the primary key
           AND PRIOR sys_guid() IS NOT NULL;

   BAN_KEY CUST_FULLNAME    ROW_NUM
---------- ------------- ----------
         1 a                      1
         1 a                      2
         1 a                      3
         2 b                      1
         2 b                      2
         2 b                      3
         2 b                      4

Pokud máte v primárním klíči tabulky jiné sloupce než ban_key, musíte se ujistit, že jsou zahrnuty v seznamu klauzule connect by prior <column> = <column> s. Je to proto, aby připojení pomocí mohlo identifikovat každý řádek jedinečně, což znamená, že se ve smyčce nachází právě nad tímto řádkem a bez dalších. PRIOR sys_guid() IS NOT NULL je vyžadováno, aby se zabránilo připojení pomocí smyček.



  1. Máte tabulku Oracle pojmenovanou jako vyhrazené slovo, jaké problémy mohou nastat?

  2. Může LINQ-to-SQL při vkládání vynechat nespecifikované sloupce, aby se použila výchozí hodnota databáze?

  3. Rozdílné CURRENT_TIMESTAMP a SYSDATE v oracle

  4. php vložit více řádků do databáze MYSQL