Italian Query basata su query

Emme Developer

Well-Known Member
Licensed User
Ciao a tutti, vorrei chiedere una mano su una query in sqllite che mi sta facendo provare parecchio..
Ho 5 tabelle:
Valori (id, tipo)
A(id)
B(id)
C(id)
D(id)

Vorrei fare un select * sulla tabella il cui nome viene tornato dalla tabella valori. Ad esempio faccio
Select tipo from Valori limit 1, e viene ritornato A
Vorrei fare select * from A, senza però lanciare una doppia query da codice..

Le variabili non possono essere implementate da quel che ho letto, serve sql dynamics. Qualche idea? Grazie
 

MarcoRome

Expert
Licensed User
Longtime User
Quindi le tabelle non sono "legate" ( reference ) dalla colonna id ?
Puoi fare un esempio un poco più chiaro.
Tipo:
1. Nella tabella Valori ho id valorizzato con 1 e tipo valorizzato con A
2. Nella tabella A ho id valorizzato con Xx ( mi deve sempre restituire un valore o più valori ?? )
3. Nella tabella B ...etc
 

sirjo66

Well-Known Member
Licensed User
Longtime User
non credo tu riesca a fare una cosa simile, mi sa che devi per forza fare 2 query
 

sirjo66

Well-Known Member
Licensed User
Longtime User
credo di si
praticamente lui ha una tabella "Valori", da cui, tramite una query estrae un certo ID e un certo TIPO
se nel campo TIPO c'è scritto "A", questo sarà il nome della tabella dalla quale deve estrarre altri dati,
se invece nel campo TIPO c'è scritto "B", dovrà estrarre i dati dalla tabella di nome "B", e così via

praticamente nel campo TIPO della tabella VALORI c'è il nome di una tabella

l'ho capito (almeno spero) da questa frase che ha scritto:
Vorrei fare un select * sulla tabella il cui nome viene tornato dalla tabella valori
 

Star-Dust

Expert
Licensed User
Penso che possa funzionare, ho visto query anche molto più complesse, che lavoravano a incrociare più tabelle.

Se EMME fa la prova ci farà sapere
 

MarcoRome

Expert
Licensed User
Longtime User
Che io sappia, attraverso il solo SQL non è possibile passare gli oggetti ( colonne, tabelle ) come variabili.
Aggiungi inoltre che Sqlite non accetta variabili... insomma penso ti convenga aggiungere una linea con una seconda query
 

Star-Dust

Expert
Licensed User
Si chiamano Query Annidate: https://it.wikipedia.org/wiki/Query_annidate

B4X:
select *
from Dipendenti
where età>(Select AVG(età)
from Dipendenti)

B4X:
select *
from Studenti
where matricola Not in (Select DISTINCT rif_matricola from Esami)

B4X:
select MAX(tot_salario)
from (
   select SUM(salario) as tot_salario
   from Lavoratori
   group by settore
) AS temporanea;

vedi anche : https://stackoverflow.com/questions/1925178/sqlite-query-using-nested-select
e https://www.tutorialspoint.com/sqlite/sqlite_sub_queries.htm
 

MarcoRome

Expert
Licensed User
Longtime User
Si chiamano Query Annidate: https://it.wikipedia.org/wiki/Query_annidate

B4X:
select *
from Dipendenti
where età>(Select AVG(età)
from Dipendenti)

B4X:
select *
from Studenti
where matricola Not in (Select DISTINCT rif_matricola from Esami)

B4X:
select MAX(tot_salario)
from (
   select SUM(salario) as tot_salario
   from Lavoratori
   group by settore
) AS temporanea;

vedi anche : https://stackoverflow.com/questions/1925178/sqlite-query-using-nested-select
e https://www.tutorialspoint.com/sqlite/sqlite_sub_queries.htm

Scusa Star non ho capito la tua risposta. Cosa vorrebbe dire ?
 

LucaMs

Expert
Licensed User
Longtime User
Se avesse una certa libertà di modificare la struttura del db (delle tabelle), le varie A,B,C... potrebbe farle diventare valori del campo di un'altra tabella.

Ci faccia sapere :)
 

LucaMs

Expert
Licensed User
Longtime User
Yes, right. Ma parliamo di Stored Procedure cosa che Sqlite non ha... e nemmeno la possibilità di giocare con le varabili a livello SQL ( non avendone )
Già, è SQLite (stavo leggendo la pagina che hai linkato per le classifiche e pensavo solo a MySQL. Tra l'altro... non c'ho capito un... tubo - o meglio, non ho la pazienza di studiarmi il tutto).
 

Star-Dust

Expert
Licensed User
Scusa Star non ho capito la tua risposta. Cosa vorrebbe dire ?
che si può funzionare la query che hai scritto.

Si chiama quesy nidificata o annidata.. Ho inserito alcuni esempi e i siti che ne spiegano l'uso
 
Last edited:

Star-Dust

Expert
Licensed User
Ovviamente nessuno degli esempi che ho inserito io, risponde al bisogno di EMME.

Sono solo degli esempi di query annidate.
 

Emme Developer

Well-Known Member
Licensed User
Scusate ragazzi, non sono riuscito ad entrare prima. Grazie a tutti per le risposte. Purtroppo le query annidate non funziona in questo caso, perché a me serve che il risultato venga utilizzato come nome tabella per una query esterna. Ho ovviamente fatto tutte le prove del caso, e credo che l'unica soluzione come detto da Marco sia aggiungere una riga al codice..
 
Top