[MySQL] Problema con LEFT JOIN

Francesco_72

Nuovo Utente
27 Mag 2016
28
2
3
48
Buongiorno a tutti,
Sto facendo una maschera di ricerca che dà la possibilità di incrociare più dati tra diverse tabelle. La principale di queste tabelle è "dipendenti" che ha una chiave "ID_dipendente" mentre le altre si agganciano a questa tramite il campo omonimo ID_dipendente. La query è la seguente:
PHP:
SELECT DISTINCT matricola, dipendenti.ID_dipendente, nome_completo, nome_articolazione, nome_ufficio, dipendenti.ufficio FROM dipendenti
LEFT JOIN uffici ON ufficio=ID_ufficio LEFT JOIN dipendente_dati_personali ON dipendenti.ID_dipendente=dipendente_dati_personali.ID_dipendente
LEFT JOIN dipendente_familiari ON dipendenti.ID_dipendente=dipendente_familiari.ID_dipendente
LEFT JOIN articolazioni ON dipendenti.articolazione=articolazioni.ID_articolazione
WHERE
matricola LIKE '%$matricola%' AND ....
AND luogo_nascita LIKE '%$luogo_nascita%' AND...
AND familiare_luogo_nascita LIKE '%$luogo_nascita%' AND...
tabelle interessate dalla query: dipendenti, uffici, articolazioni, dipendente_dati_personali, dipendente_familiari

Il contenuto dei campi di ricerca viene inserito nelle variabili ($) tramite PHP. In pratica lasciando tutti i campi vuoti dovrebbe comparirmi l'elenco di tutti i dipendenti. Così è finche non inserisco nel WHERE la ricerca dei campi relativi alla tabella dipendente_familiari. Anche se i campi sono vuoti mi compaiono solo i dipendenti che hanno dei familiari inseriti in anagrafica. Con la LEFT JOIN non dovrebbe cmq trovare tutti i dipendenti a prescindere che abbiano un familiare? Non capisco dove sbaglio.
 
Ultima modifica di un moderatore:

marino51

Utente Attivo
28 Feb 2013
3.025
174
63
Lombardia
verifica di non avere una clausola tipo
WHERE dipendente_familiari.ID_dipendente is not null
perché questa clausola limita la selezione, estraendo solo gli elementi presenti nelle due tabelle

l'esempio sottostante riproduce l'effetto,
la prima selezione é fatta sulla tabella equivalente alla dipendente_familiari
la seconda selezione é fatta sulla tabella equivalente alla dipendenti
la selezione coincide (una parte é nascosta per ottenere un'immagine non troppo grande)

upload_2018-2-22_11-15-38.png
 

marino51

Utente Attivo
28 Feb 2013
3.025
174
63
Lombardia
una considerazione,
campi vuoti come clausole di selezione, possono produrre risultati inattesi,
ho sempre preferito aggiungere le clausole quando sono presenti i valori
esempio
PHP:
    . " from caratteristiche"
    . " where 1=1";

  if ($car['ca_cod']) { $sql .= " and ca_cod like '%" . $car['ca_cod'] . "%'"; }
 

Francesco_72

Nuovo Utente
27 Mag 2016
28
2
3
48
Intanto grazie delle risposte.

No purtroppo non ci sono clausole "is not null" (tra l'altro i campi delle tabelle non accettano valori null).

La seconda soluzione che mi hai dato era quella che sto implementando anche io ma ero curioso di capire secondo quale logica i risultati non venissero filtrati correttamente
 

marino51

Utente Attivo
28 Feb 2013
3.025
174
63
Lombardia
non ci sono clausole "is not null" (tra l'altro i campi delle tabelle non accettano valori null).
bisogna capire come lavorano le clausole con i campi vuoti

mentre con "is not null"
mi riferisco al risultato della join che può essere
"null" se non trovato, oppure
"not null" cioè restituisce il valore del campo se trovato
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.392
338
83
@Francesco_72
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code.gif
quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box inserisci 2.png.JPG

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 

Francesco_72

Nuovo Utente
27 Mag 2016
28
2
3
48
@Francesco_72
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag Vedi l'allegato 4960 quando posti del codice, oppure la funzione codice dalla barra degli strumenti
Vedi l'allegato 4961
Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro

Chiedo scusa, ma trattandosi di un comando MySQL, erroneamente non mi ero posto il problema dell'inserimento come "codice". Vale per il futuro. Grazie ancora a Marino per le risposte
 
Discussioni simili
Autore Titolo Forum Risposte Data
S problema con recupero dati tabella mysql PHP 2
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
V [MySQL] problema query con date su server MySQL 5
G inserimento csv in tabella mysql; problema con struttura PHP 11
S Problema ricevimento dati da con MySQL PHP 6
T PHP+MYSQL: problema con quelle maledette lettere accentate... PHP 5
F Problema con mysql workbench MySQL 0
M [MySql - VB6 sp6] Problema connessione db con alcuni pc (errore Lost connection to MySQL server...). MySQL 1
gandalf1959 problema con la codifica caratteri accentati e speciali tra php e mysql PHP 3
webmachine [PHP][MYSQL] Problema con le SELECT PHP 5
A [MySQL] problema con la command line client. MySQL 0
neo996sps PHP/MySQL - Problema con generazione array PHP 14
S Problema con pagination e mysql PHP 0
I Problema con DELETE - MYSQL PHP 6
M problema con form scrittura su mysql PHP 3
H Problema con MySQL e PHP, dopo aver fatto una SELECT non ottengo alcun risultato PHP 7
G Problema con query mysql MySQL 1
A problema con database (mysql - php) PHP 4
A problema con database (mysql - php) PHP 1
L PHP: problema con query mysql. PHP 3
S Autocompletamente con jQuery, PHP e MySQL - Problema con le query PHP 7
T Problema: Confronto date con Mysql PHP 3
A problema con php and mysql aiuto !!!! PHP 1
T Problema con form e recupero dati da mysql PHP 17
T Problema condizione di un form con mysql PHP 15
R Problema con UPDATE su DB mysql MySQL 1
K [MYSQL] problema con una query in loop MySQL 1
B Problema con query mySql Java 2
A problema con query mysql PHP 1
F problema nella connessione con mysql presente in Aruba PHP 3
G Problema con gestore esterno Mysql PHP 11
M Problema con newslettere e mysql PHP 7
M mysql 4 problema con tabella frm Database 2
D problema php mysql PHP 1
D problema php mysql PHP 1
S Problema esportazione tabelle Mysql in Excel PHP 0
G Problema caricamento tabelle MySql da PhP PHP 0
Z MySQL problema Database 0
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
batmanLF [MySQL] Problema funzione SUM MySQL 1
T Problema somma mysql MySQL 8
J [MySQL] Problema di sintassi? MySQL 1
Q Problema su come far aggiornare i campi su un database Mysql PHP 17
G Mysql ( Query) problema interrogazione MySQL 0
simgia [MySQL] INNER JOIN problema MySQL 0
daniele430 [C++] Problema accenti - mysql - XML C/C++ 0
M Problema MySQL e sessioni MySQL 0
H problema input e echo più linee di una tabella mysql PHP 13

Discussioni simili