inner join

Ho 3 tabelle clienti-penale-giudiziaria

tutte e tre le tabelle hanno in comune il campo idcliente

esempio nella tabella penale ho:

idcliente  -   causa_pen
   1        -      3 
   1        -      2
   2               4

esempio nella tabella giudiziaria ho:

idcliente -    causa_giu
    1                 5
    3      -          6

Adesso vorrei tirare fuori dalle tabelle penale e giudiziaria solo idcliente=1

in modo da ottenere:

idcliente  -   causa
   1        -      3 
   1        -      2
   1        -      5

Se nella tabella giudiziaria non ci fossero stati record con idcliente=1 avrei ottenuto :

idcliente  -   causa
   1        -      3 
   1        -      2

Ho provato in questo modo ma non ottengo niente

codice PHP:

select *

from cliente left join penale ON cliente.idcliente=penale.idcliente left join giudiziaria ON cliente.idcliente=giudiziaria.idcliente

 :bye:

inviato 9 anni fa
leoneweb
X 0 X

Per prima cosa devi dividere la query in 2 SELECT, una per la tabella penale e lìaltra per la tabella giudiziaria. Al massimo, se vuoi fondere le 2 uery in una devi usare la UNION, clausola non supportata dalle vecchie versioni di MySQL.

Inoltre se conosci l'id dell'utente non ti serve fare una JOIN

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Giusto conoscendo l'idcliente non mi serve la JOIN mi ero perso in un bicchier d'acqua 

Ho fatto in questo modo

SELECT * FROM giudiziaria, giudiziaria WHERE idcliente = '1'

come risposta ottengo

Column 'idcliente' in where clause is ambiguous

perchè??

eppure entrambe hanno idcliente in comune

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

perché hai messo 2 volte la tabella giudiziaria nella FROM?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ho solo sbagliato a scivere qui nel forum

la select era

SELECT * FROM penale, giudiziaria WHERE idcliente = '1'

con il solito errore   :bye:

risposto 9 anni fa
leoneweb
X 0 X

Se stai indicando 2 tabelle nella FROM per ottenere i risultati sia della prima che della seconda allora sappi che stai sbagliando strada...

Come ti ho già detto, per ottenere l'elenco dei record presenti nelle 2 tabelle che si riferiscono  ad un paricolare cliente, devi fare 2 SELECT oppure una SELECT con UNION.

Scrivere "FROM penale, giudiziaria" produce un prodotto cartesiano tra le due cartelle, ovvero incrocia tutte le righe della prima con tutte le righe della seconda producendo un numero di risultati pari al prodotto delle righe presenti nelle tabelle. In pratica si tratta di un JOIN in cui la clausola ON viene sostituita dalla WHERE.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda