[MySQL] WHERE IN and IF NOT EXISTS

  • Creatore Discussione Creatore Discussione felino
  • Data di inizio Data di inizio

felino

Utente Attivo
12 Dic 2013
940
10
18
Aci Catena (Catania)
Buonasera a tutti,
ho necessità di fare un query su due tabelle:

UTENTI
user_id | email | telefono | mobile

STRUTTURA
user | email | telefono | mobile

le due tabelle sono in relazione tramite user_id e user.

Ho creato la seguente query, che estrae le informazioni basandosi sul campo email:
Codice:
SELECT t1.email, t1.user_id, t1.telefono, t1.mobile, t2.telefono, t2.mobile
FROM utenti t1, struttura t2
WHERE 
t1.email IN (
'[email protected]', 
'[email protected]', 
'[email protected]'
) 
and
t1.user_id = t2.user
ORDER BY t1.email

Ovviamente c'è un limite:
se l'indirizzo da me passato non è presente su UTENTI ma solo su STRUTTURA nella query non ottengo alcun record in merito.

Vorrei usare la condizione NOT EXISTS o scegliere un'altra strada in modo tale che se in indirizzo non viene trovato su UTENTI allora la query viene fatto su STRUTTURA.

Come posso procedere?

Grazie.
 
Grazie Marino51!

Un'altra condizione da aggiungere: non per forza t1.user_id ha una corrispondenza con t2.user.

Posso risolvere utilizzando un LEFT JOIN?

Codice:
Codice:
SELECT
    t1.email, t1.user_id, t1.telefono, t1.mobile, t2.telefono, t2.mobile
FROM
    utenti t1,
    LEFT JOIN struttura t2
WHERE (
        t1.email IN (
        '[email protected]', 
        '[email protected]', 
        '[email protected]'
        ) 
    OR
        t2.email IN (
        '[email protected]', 
        '[email protected]', 
        '[email protected]'
        )
    )
AND
    t1.user_id = t2.user
ORDER BY
    t1.email

Nel caso in cui la mail viene trovata in t2 e non in t1 l'ORBER BY t1.email potrebbe influire negativamente?
 
con left join, vengono estratti gli elementi dalla tabella t1 con o senza corrispondenza in t2
quindi ok order by, inutile or con condizione su t2
 
Il problema e' proprio questo: che alcuni indirizzi email possono essere presenti in t1 e non in t2 e viceversa.

Come faccio a far la query sul t2?

Grazie,
 
anziché usare left join sostituisci con right join e tutte le condizioni che hai applicato a t1 le applichi solo a t2
 
meglio scrivere ..
Codice:
SELECT
    t1.email, t1.user_id, t1.telefono, t1.mobile, t2.telefono, t2.mobile
FROM
    utenti t1,
    LEFT JOIN struttura t2
WHERE
      t1.email IN (
      '[email protected]',
      '[email protected]',
      '[email protected]'
      )
AND
    t1.user_id = t2.user
ORDER BY
    t1.email


SELECT
    t1.email, t1.user_id, t1.telefono, t1.mobile, t2.telefono, t2.mobile
FROM
    struttura t2,
    LEFT JOIN utenti t1
WHERE
      t2.email IN (
      '[email protected]',
      '[email protected]',
      '[email protected]'
      )
AND
    t2.user = t1.user_id
ORDER BY
    t2.email
 

Discussioni simili