PDA

View Full Version : Query con filtro dei dati


voyager18
26-10-2012, 17:32
Ciao a tutti! Ho una tabella di questo genere

ID-----Cod-----IdA----IdB
10-----123-----7------7
11-----123-----8------7
14-----123-----10-----8
15-----123-----7------8
16-----123-----7------9
17-----123-----11-----9
18-----123-----7------10
19-----123-----12-----10

Da questa tabella devo selezionare le righe che hanno in IdA i valori 7 e 8 ma che hanno anche lo stesso valore in IdB. Il valore di IdB non lo conosco a priori quindi non posso mettere una clausola WHERE IdB=7.

Facendo una query così SELECT * FROM tab1 WHERE IdA=7 OR IdA = 8 mi restituisce anche le righe con ID 15, 16 e 18 mentre io sono interessato solo alle righe con ID 10 e 11 ovvero alle righe che hanno entrambi i valori di IdA che ho specificato nella WHERE e hanno entrambe lo stesso valore di IdB. C'è un modo per filtrare i dati in questo modo?
Grazie!!

ndakota
26-10-2012, 18:00
SELECT * FROM tab1 WHERE (IdA=7 OR IdA = 8) AND IdA = IdB

voyager18
26-10-2012, 19:53
No, non mi sono spiegato bene. La presenza del valore 7 sia nel campo IdA che nel campo IdB era un caso.. Ad esempio devo poter selezionare anche le righe con ID 14 e 15 che hanno lo stesso IdB ma IdA diversi.
Quello che mi hai suggerito invece mi seleziona le righe che hanno IdA=IdB che non è quello che mi serve.

ndakota
26-10-2012, 20:07
Mi spiace ma non ho ancora capito :stordita:

wingman87
26-10-2012, 20:57
E' stata dura ma credo di aver capito.
Ti servono tutti i record che hanno lo stesso idB e che soddisfano i filtri su idA.
Sul come farlo al momento non mi viene in mente niente ma lascio questo post per provare a gettar luce sull'arcano :D
Un dubbio però: e se ci sono per esempio 3 record con idB=3 e 4 con idB=5? (che ovviamente rispettano i filtri su idA)
Li ritorni tutti?

voyager18
26-10-2012, 21:07
Un dubbio però: e se ci sono per esempio 3 record con idB=3 e 4 con idB=5? (che ovviamente rispettano i filtri su idA)
Li ritorni tutti?Si, basta che hanno lo stesso IdB e soddisfano i filtri su IdA.

ndakota
26-10-2012, 21:15
Ma su IdB io non ho capito. Vuoi tutte le righe che hanno un valore che compare più di una volta?

voyager18
26-10-2012, 21:18
Si, mi servono le righe che hanno lo stesso valore su IdB (che sono più di una) e che soddisfano i filtri su IdA.

ndakota
26-10-2012, 21:39
SELECT * FROM tab1 WHERE (IdA=7 OR IdA = 8) AND IdB IN (SELECT DISTINCT IdB FROM tab1 where count(idb) > 1)


Non funzionerà MAI ma non posso provare. E' il meglio che riesco a fare con le mie conoscenze rimaste di SQL :D