• User Attivo

    Join articolato su 3 tabelle

    Salve,
    sto impazzendo per eseguire una query su 3 tabelle:

    • nelle tabelle 1 e 2 ci sono solo i campi: id auto-increment e il valore
    • nella tabella 3 ci sono i campi: id auto-increment, id della tabella 1, id della tabella 2
    tabella1
    -------------
    id | valore
    
    tabella2
    -------------
    id | valore
    
    tabella3
    ------------------------
    id | id_t1 | id_t2
    

    Vorrei estrarre tutti i record delle tabelle 1 e 2 che non esistono nella tabella 3, utilizzando (id_t1 + id_t2) come chiave univoca.

    es:

    Risultato della query:
    ----------------------------------------------
    valore_t1 | valore_t2
    valore_t1 | valore_t2
    valore_t1 | valore_t2
    valore_t1 | valore_t2
    valore_t1 | valore_t2
    

    E' possibile farlo?


    andreadragotta 1 Risposta
  • Staff Tecnico

    ciao @w-t secondo me è sbagliato il modo in cui hai progettato la tabella 3.

    Se id_t1 + id_t2 può esserci una sola volta puoi crearti una chiave composta e quindi la tabella sarà

    tabella3

    id_t1 | valore
    id_t2 | valore

    In questo modo potrai fare la tua join ma manterrai la correlazione tra le varie tabelle.


  • User Attivo

    Ciao
    in un altro forum mi hanno risposto cosi:

    select t3.id, x.id_t1, x.id_t2 from (
      select
        t1.id as id_t1
      , t2.id as id_t2
      from tabella1 t1, tabella2 t2) x
    left join tabella3 t3 ON x.id_t1 = t3.id_t1 AND  x.id_t2 = t3.id_t2
    where t3.id is NULL
    order by t3.id, x.id_t1, x.id_t2
    

    Ma mi da errore: Unknown column 't3.id_t1' in 'on clause'

    Non capiamo il perchè


    andreadragotta 1 Risposta
  • Staff Tecnico

    @w-t se la struttura della tua tabella 3 è uguale a quella che hai postato sopra è normale.

    Riesci a postarci lo schema SQL così partiamo da quello?