Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    [SQL] select per esclusione

    Ciao Ragazzi/e
    come posso fare una Select per esclusione?

    Mi spiego meglio...

    Ho due tabelle:

    Tab1
    - id
    - nome
    - cognome

    Tab2
    - id
    - eta

    Vorrei selezionare tutti i record di Tab1 con Id non trovato in Tab2. Come posso fare?

    Esempio:

    Valori di Tab1:
    1,Mario,Bross
    2,Ciccio,Palla
    3,Mario,Topolino

    Valori di Tab2:
    1,Mario,Bross
    3,Mario,Topolino

    Il risultato deve essere il record:
    2,Ciccio,Palla

    Vi saluto e grazie Max
    http://www.mdlwork.com

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    select * from tab1 where id not in (select tab2.id from tab2)
    oppure puoi mettere in left join tab2

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    ciao Stabi

    Si infatti è come dici tu, avevo già trovato.. Anche se in quello che hai scritto c'è un piccolissimo errore:

    select * from tab1 where id not in (select tab2.id from tab2)

    select * from tab1 where id not in (select id from tab2)

    Senti ma a livello di velocità, la join ottimizza i tempi? Mi sembra un bel pò pesante come query..

    Ti saluto e grazie Max
    http://www.mdlwork.com

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    secondo me le left join sono meglio delle not in
    poi dipende dal tipo del DB
    in mysql non so , provale entrambe ma se i dati non sono tanti non dovresti
    notare grosse differenze.

    PS: meglio la mia. la tua è ambigua.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    Stabi...

    Si effettivamente la mia è ambigua ma con MySql le due query danno lo stesso risultato (la tua mi dava errore ma avevo sbagliato a scrivere).

    Invece, ho provato LEFT JOIN ma il risultato sono tutti i record dell'intersezione di Tab1 + Tab2 ed in più tutti i record che si trovano in Tab1 e non in Tab2..

    La query che ho scritto è questa, forse ho perso qualche pezzo:

    select A.id from Tab1 as A LEFT JOIN Tab2 as B ON A.id = B.id

    Ti saluto Max
    http://www.mdlwork.com

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    devi aggiungere
    where b.id is null

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    231

    Effettivamente...

    ...Funziona, ho provato le tre select e restituiscono lo stesso risultato.

    La Join mi sembra pure a me meglio (parlo di sintassi), proverò a testare e vedere i tempi di esecuzione.

    Grazie per l'aiuto stabi, ti saluto Max
    http://www.mdlwork.com

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591

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 © 2025 vBulletin Solutions, Inc. All rights reserved.