- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Correttezza query mysql
-
Correttezza query mysql
Salve, mi sto incervellando in una query con mysql che non mi da i risultati dovuti, spiego la situazione.
Ho un database di un portale dove si registrano degli utenti, quindi ho una tabella principale dove vanno inseriti gli utenti con i loro dati, poi avendo molti dati in comune come città, provincia ecc... ho predisposto delle tabelle secondarie che sono richiamate dalla tabella principale con chiavi esterne, e in alcuni casi dove c'è una relazione molti a molti tra la tabella principale e quella secondaria, ho creato una tabella intermediaria che contiene 2 chiavi esterne che puntano rispettivamente agli indici delle 2 tabelle.
Se la struttura che ho creato è corretta, devo fare una select per prelevare tutti gli utenti e i rispettivi dati, e l'ho impostata in questo modo:
SELECT elenco tutti campi che mi servono senza nominare le chiavi esterne FROM utenti JOIN eta ON utenti.id_capelli=capelli.id_capelli JOIN (prov_utenti JOIN provincie ON prov_utenti.id_provincia=provincie.id_provincia) ON utenti.id_utente=prov_utenti.id_utente JOIN .......
In pratica elenco i campi che mi servono e poi faccio delle INNER JOIN a partire dalla tabella utenti e quando c'è una relazione molti a molti con una tabella di mezzo uso le parentesi per effettuare prima la JOIN tra la tabella intermediaria e quella secondaria e poi con la tabella principale.
Facendo così non ho nessun risultato ma non ottengo nemmeno errori, cosa sbaglio?
-
Se non ottieni errori significa solo che la sintassi della query è corretta, anche se la sua logica porta a restituire zero record.
Probabilmente un JOIN è fatto in modo da non restituire nulla, questo fa si che tutta la query non renda alcun record.
Per vedere qualcosa puoi aggiungere un LEFT a tutti i JOIN, in modo da vedere quale di questi blocca l'output.
-
Ho risolto, ho dovuto aggiungere LEFT alle JOIN fuori parentesi quando c'è la relazione molti a molti e adesso i risultati sono regolari.
Grazie dell'aiuto.