sql >> Database >  >> RDS >> Oracle

Opsommen van rijen in een inner join

U hebt geen inner join naar een dummy-tabel of een analytische functie nodig om de rijnummers te genereren; je zou gewoon connect by (en de bijbehorende niveaufunctie) op de tafel zelf kunnen gebruiken, zoals:

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

Als je andere kolommen dan ban_key in de primaire sleutel van de tabel hebt, moet je ervoor zorgen dat ze zijn opgenomen in de connect by-clausulelijst van prior <column> = <column> s. Dit is zodat de connect by elke rij uniek kan identificeren, wat betekent dat het net over die rij loopt en geen andere. De PRIOR sys_guid() IS NOT NULL is vereist om te voorkomen dat verbinding door lussen optreedt.



  1. kan ik array verplaatsen van php naar javascript ophalen uit mysql-database?

  2. Haal de waarde van alle kolommen uit de ene tabel en haal de waarde van de andere kolom uit de tweede tabel

  3. Rails-MySQL-fout - niet-geïnitialiseerde constante MysqlCompat::MysqlRes

  4. VERWIJDEREN VS DROP in SQL