Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di exFelino
    Registrato dal
    Jul 2014
    residenza
    Aci Catena (CT)
    Messaggi
    708

    [MySQL] WHERE IN and IF NOT EXISTS

    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 (
    '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.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    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'
    )
    OR

    t2.email IN (
    'email1@email.it',
    'email2@email.it',
    'email3@email.it'
    ))
    and
    t1
    .user_id = t2.user
    ORDER BY t1
    .email
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di exFelino
    Registrato dal
    Jul 2014
    residenza
    Aci Catena (CT)
    Messaggi
    708
    Grazie badaze!

    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 (
    		'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?

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    se un id è nelle 2 tabelle la mail è identica in entrambe ?
    puo' esserci un id in utenti assente in struttura ?
    puo' esserci un id in struttura assente in utenti ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it L'avatar di exFelino
    Registrato dal
    Jul 2014
    residenza
    Aci Catena (CT)
    Messaggi
    708
    Rispondo alle tue domande:
    - se un id è nelle 2 tabelle la mail è identica in entrambe ?
    Non e' detto che le due email siano uguali

    - puo' esserci un id in utenti assente in struttura ?
    Esatto

    - puo' esserci un id in struttura assente in utenti ?
    No, se e' presente in struttura e' presente anche in utenti

    Grazie.

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,361
    La LEFT JOIN deve essere scritta con la clausola ON
    codice:
    codice:
    SELECT
        t1.email, t1.user_id, t1.telefono, t1.mobile, t2.email, t2.telefono, 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
    Oppure prova questo (non testato)
    codice:
    codice:
    select * from 
    (
    select  t1.email as e, t1.user_id as u, t1.telefono as t, t1.mobile as m
    from utenti
    union
    select  t2.email as e, t2.user as u, t2.telefono as t, t2.mobile as m
    from struttura
    )
    where e in (
             'email1@email.it', 
             'email2@email.it', 
             'email3@email.it'
             )
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Utente di HTML.it L'avatar di exFelino
    Registrato dal
    Jul 2014
    residenza
    Aci Catena (CT)
    Messaggi
    708
    Badaze,
    ho adottato e risolto con la prima soluzione.


    codice:
    
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.