Oracle dinamica Entra Sfida
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:
- Ristrutturazione della query di mettere
tbl
in una subquery non è un'opzione. - La query deve utilizzare
a,b->1; x->2; y->3
, non semplicemente unirsi a1,1,2,1,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' |
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