Domanda

Modifica esempio molto più semplice. (Precedentemente intitolato: Oracle Colonna Injection)

Obiettivo: Completa la domanda sotto generare i seguenti risultati

SCOPO:. Creare una colonna dipendente da una colonna esistente in una tabella senza mettere il tavolo in una sottoquery

Regole:

  1. Ristrutturazione della query di mettere tbl in una subquery non è un'opzione.
  2. La query deve utilizzare a,b->1; x->2; y->3, non semplicemente unirsi a 1,1,2,1,3.
  3. Il tbl sottoquery non deve essere modificato.

SELECT val, cat
  FROM (SELECT 'a' val FROM DUAL  UNION ALL
        SELECT 'b' val FROM DUAL  UNION ALL
        SELECT 'x' val FROM DUAL  UNION ALL
        SELECT 'b' val FROM DUAL  UNION ALL
        SELECT 'y' val FROM DUAL) tbl
   ... JOIN ( ... ) ON ...

 val | cat
-----+-----
 'a' |  1
 'b' |  1
 'x' |  2
 'b' |  1
 'y' |  3

Bene, ho ottenuto fino a questo punto (in basso), ma non posso aggiungere una seconda LEFT JOIN.

SELECT val, cat
  FROM (SELECT 'a' val FROM DUAL  UNION ALL
        SELECT 'b' val FROM DUAL  UNION ALL
        SELECT 'x' val FROM DUAL  UNION ALL
        SELECT 'b' val FROM DUAL  UNION ALL
        SELECT 'y' val FROM DUAL) tbl
   LEFT JOIN ( SELECT 1 cat FROM DUAL ) ON val in ('a','b')

 val | cat
-----+-----
 'a' |  1
 'b' |  1
 'x' |  
 'b' |  1
 'y' |  
È stato utile?

Soluzione

SELECT tbl.val, map.cat
  FROM (SELECT 'a' val FROM DUAL  UNION
        SELECT 'b' val FROM DUAL  UNION
        SELECT 'x' val FROM DUAL  UNION
        SELECT 'b' val FROM DUAL  UNION
        SELECT 'y' val FROM DUAL) tbl
   LEFT JOIN ( SELECT 'a' val, 1 cat FROM DUAL UNION
               SELECT 'b' val, 1 cat FROM DUAL UNION
               SELECT 'x' val, 2 cat FROM DUAL UNION
               SELECT 'y' val, 3 cat FROM DUAL ) map ON map.val = tbl.val

Da tuoi esempi, ho il sospetto che si intende utilizzare UNION ALL anziché UNION (in modo da avere 2 file per la val = 'b' apparire nel risultato).

Il "Ho avuto fino a questo punto" esempio non ancora eseguito come scritto - ha bisogno di parentesi intorno alla lista IN -. E anche una volta a risolvere che non produce l'output si mostra

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top