|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2001
Messaggi: 163
|
[MYSQL]Query annidate [help]
Salve a tutti, il mio problema è che probabilmente non ho capito molto di come funzionano le query annidate, e in particolare mi riferisco a quelle query che effettuano un passaggio di binding, ma passo subito a illustrarmi il mio esempio:
Tabella: Persona(nome, cognome, codfiscale) Il mio intento è quello di estrarre le persone che hanno degli omonimi (stesso nome e cognome ma diverso codice fiscale). Per motivi di (lo richiede l'esercizio) devo per forza usare le query annidate, a questo punto avevo pensato a una query di questo tipo: Codice:
SELECT P1.nome, P1.cognome, P1.codfiscale
FROM persona P1
WHERE P1.codfiscale = any ( SELECT P2.codfiscale
FROM persona P2
WHERE P1.nome = P2.nome AND
P1.cognome = P2.cognome AND
P2.codfiscale <> P1.codfiscale)
Dai testi successivi che ho fatto ho capito che l'errore è concettuale e dovuto al fatto che credo di non aver capito proprio come viene eseguita la query in questo caso. Io mi aspetterei che per ogni riga della query esterna venisse eseguita la subquery (la quale dovrebbe dare come risultato ogni volta i due codici fiscali delle due persone omonime (nel mio db ne ho messe solo due) e quindi dovrebbe essere fatto il controllo where per decidere se selezionare quella riga oppure no. Questo non accade, e non solo ma ho potuto constatare (lo dico quasi con certezza) che in realtà la subquery ogni volta che viene eseguita produce come risultato un solo valore e non due come mi aspettavo. Ad ogni modo quà serve uno che mi spieghi come effettivamente viene eseguita la query in questo caso. Da notare che, per "passaggio di binding" il libro intende il fatto che come potete constatare, nella subquery si fa riferimento alla tabella "persona P1" usata nella query esterna. Spero vivamente in un aiuto da un anima pia, io ci sto sbattendo da testa da stamattina ma non sono proprio riuscito a capirne il meccanismo.
__________________
CASE:NZXT S340 Midi-Tower Nero - Rosso, ALI:EVGA SuperNOVA 650 G2 650W, 80 PLUS Gold, Full modular, MOBO:MSI H270 GAMING M3, CPU:Intel Core i7-7700, DISSY:Noctua NH-U12S, RAM:Corsair Vengeance LPX Red, 2x8GB, 2400MHz DDR4, CL16, VGA:ZOTAC GeForce GTX 1080 AMP, HD:SEAGATE Barracuda 7200.11 1000GB + Crucial SSD MX300 525GB SATA3 |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Sep 2001
Messaggi: 163
|
tanto ci ho sbattuto la testa che alla fine ho risolto da solo...
__________________
CASE:NZXT S340 Midi-Tower Nero - Rosso, ALI:EVGA SuperNOVA 650 G2 650W, 80 PLUS Gold, Full modular, MOBO:MSI H270 GAMING M3, CPU:Intel Core i7-7700, DISSY:Noctua NH-U12S, RAM:Corsair Vengeance LPX Red, 2x8GB, 2400MHz DDR4, CL16, VGA:ZOTAC GeForce GTX 1080 AMP, HD:SEAGATE Barracuda 7200.11 1000GB + Crucial SSD MX300 525GB SATA3 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:22.



















