- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- [MySql] Join un po particolare tra 3 tabelle
-
[MySql] Join un po particolare tra 3 tabelle
Salve
mi trovo in una situazione un po difficile con una queryHo 3 tabelle, una rappresentante l'elenco delle province italiane, una i comuni, ed una un elenco di locali, tutti messi in relazione tra di loro
Descrivo le tabelle, credo che sia abbastanza autoesplicativo, le tabelle sono in relazione uno a molti tramite l'id, i comuni con le province, i locali con i comuni, in modo che si possa traversare il database e sapere in che provincia si trova un determinato localeProvince
- Id_provincia
- Nome_provincia
Comuni
- Id_comune
- Id_provincia
Locali
- Id_locale
- Id_comune
Ho bisogno di sapere quali sono le provincie senza nessun locale
Inizialmente avevo provato a fare una left join tra comuni e locali dove la relazione era nulla, e mi dava risultati corretti ma mancava la provincia
Ho aggiunto la inner join tra province e comuni, ma mi ripeteva le province centinaia di volte, ho provato ad aggiungere un Distinct(Id_provincia), ma mi da zero records come risultato
Ho provato varie combinazioni e soluzioni, ma nessuna funziona, voi come fareste?
-
Io userei la funzione mysql_affected_rows per contare le righe di una chiamata: anche annidando due cicli la cosa mi pare molto veloce!
-
Il mio problema è che se non uso il distinct me ne restituisce migliaia perchè conta le righe dei comuni, se uso il distinct sull'id delle province mi restituisce un recordset vuoto
non avevo pensato ad utilizzare quella funzione, ma penso che il problema rimanga lo stesso di adesso che uso un count()
non lo so, sarà inesperienza o uno di quei casi limite in cui mysql ricompila la query e fa pasticci
-
Mh... Con mysql_affected_rows puoi semplicemente fare un if se uguale a 0 allora stampa il nome!
-
ah chiedo scusa pensavo fosse una funzione di mysql, masochisticamente sto utilizzando asp
non c'è un modo per filtrare i risultati solo tramite query?
-
Mh... sinceramente non saprei: stai provando a "buttare" le query direttamente in phpMyAdmin per vedere cosa ti rende?
-
Posso copiare la query che uso (con i nomi di tabella e campi un po diversi)
SELECT COUNT( DISTINCT (mappa_province.ID_provincia ) ) FROM mappa_province INNER JOIN mappa_comuni ON mappa_comuni.ID_provincia = mappa_province.ID_provincia LEFT JOIN locali ON mappa_comuni.ID_comune = locali.ID_comune WHERE locali.ID_comune IS NULL
avevo scritto male prima, questa query con il count mi da 103 (il totale delle province), senza mi da l'elenco di tutte e 103 le province
probabilmente sbaglio qualcosa alla base della query
-
mi sono accorto adesso quanto sono stordito
ho l'id della provincia riportato nella tabella del comune, basta fare una join a dueSELECT DISTINCT (mappa_comuni.ID_provincia ), locali.id_comune FROM mappa_comuni LEFT JOIN locali ON mappa_comuni.ID_comune = locali.ID_comune WHERE locali.ID_comune IS NULL
ma mi restituisce anche questo tutte le province :S
-
Scusa prova a selezionare in una query (A) i comuni che hanno dei locali e poi tramite un NOT IN () trovi i comuni che non hanno locali. Per intenderci (andando un po' alla ceca):
SELECT * from provincie p
LEFT JOIN comuni c on c.id_comune = p.id_comune and c.id_comune NOT IN (SELECT DISTINCT id_comune from locali)M.
-
Ho provato questa ma mi restituisce sempre tutte le province :S
SELECT DISTINCT(ID_provincia) FROM mappa_comuni c WHERE c.id_comune NOT IN (SELECT DISTINCT id_comune from locali)
-
Non è che hai dei comuni senza locali in tutte e 5 le provincie ?
M.
-
ah... mi sento un idiota
si, ovviamente le province che contengono comuni con locali registrati contengono anche comuni senza locali, quindi per questo me li restituisce sempre tutti
ma allora che devo fare?
-
ehmm... capire per bene cosa devi fare....
M.