PDA

View Full Version : [MySQL] WHERE IN and IF NOT EXISTS


robertino_salemi
22-01-2017, 19:35
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:

SELECT t1.email, t1.user_id, t1.telefono, t1.mobile, t2.telefono, t2.mobile
FROM utenti t1, struttura t2
WHERE
t1.email IN (
'email1@email.it',
'email2@email.it',
'email3@email.it'
)
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.

robertino_salemi
23-01-2017, 10:24
Grazie coffe_killer!

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

Posso risolvere utilizzando un LEFT JOIN?

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 (
'email1@email.it',
'email2@email.it',
'email3@email.it'
)
OR
t2.email IN (
'email1@email.it',
'email2@email.it',
'email3@email.it'
)
)
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?

robertino_salemi
23-01-2017, 13:05
Ho una perplessitā sulle strutture comunque:
email, telefono e mobile si STRUTTURA sono repliche di quelle in UTENTI?

No, potrebbe essere uguali ma non per forza, ma l'utente compila tali campi come desidera.
Immaginali un po' come privati quelli presenti in UTENTI e pubblici quelli presenti in STRUTTURA.

robertino_salemi
23-01-2017, 14:54
Grazie Coffe_Killer!

Stasera provo la query...

Due domande:
1) Se una query viene trovata su entrambe le tabelle viene estratta due volte?

2) C'e' un modo che mi permetta di capire se una email e' presente in una tabella piuttosto che nell'altra?

Grazie.

robertino_salemi
23-01-2017, 18:37
Grazie per i preziosi link!
Ne faccio tesoro e li studio il prima possibile...

Per il punto 2, lascia stare poca importanza...

Comunque la query al momento mi sta restituendo email non presenti nella mia condizione WHERE. :muro:

robertino_salemi
24-01-2017, 16:23
Risolto,
il problema e' che la query mi restituiva solo quella di UTENTI che non sembra coincide con quella si STRUTTURA.
Alla fine le ho fatte restituire entrambe.



SELECT
t1.email, t2.email, t1.user_id, t1.mobile, t2.mobile
FROM
utenti t1
LEFT JOIN struttura t2 ON t1.user_id=t2.user
WHERE (
t1.email IN (
'email1@email.it',
'email2@email.it',
'email3@email.it'
)
OR
t2.email IN (
'email1@email.it',
'email2@email.it',
'email3@email.it'
)
)
ORDER BY
t1.email, t2.email