Oracle
 sql >> база данни >  >> RDS >> Oracle

Изброяване на редове във вътрешно съединение

Не се нуждаете от вътрешно свързване към фиктивна таблица или аналитична функция, за да генерирате номерата на редовете; можете просто да използвате свързване чрез (и съответната му функция за ниво) на самата таблица, така:

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

Ако имате други колони освен ban_key в първичния ключ на таблицата, трябва да се уверите, че те са включени в списъка на клаузата за свързване от prior <column> = <column> с. Това е така, че свързването чрез може да идентифицира всеки ред уникално, което означава, че се зацикля само върху този ред и няма други. PRIOR sys_guid() IS NOT NULL се изисква, за да се предотврати възникването на свързване чрез цикли.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените размера на колоната на изглед в Oracle

  2. Възможно ли е да управлявате база данни на oracle с flyway?

  3. Създайте pl/sql функция и намерете високосни години

  4. Как да клонирате среда R12.2

  5. Конкатенирането на числа в израз на виртуална колона хвърля ORA-12899:стойността е твърде голяма за колона