Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [MYSQL] confronto di insiemi

    ciao,
    vorrei scrivere una query SQL che dati due insiemi di valori A{2,3,4,7,9} e B{3,4,5,6,8} restituisca i valori di A presenti in B

    grazie

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Select a from tabella1
    inner join tabella2 on a=b
    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
    a e b sono set di valori non campi
    Una soluzione potrebbe essere

    select 2 in (2,4,5)

    che restituisce 1 quando 2 è presente in (2,4,5), altrimenti 0. Così però posso testare un valore per volta.

    select 2,4 in (2,4,5) non fonziona perchè restituisce 2 in ogni caso e poi esegue il test tra 4 e (2,4,5)

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da matteolandi Visualizza il messaggio
    a e b sono set di valori non campi
    Una soluzione potrebbe essere

    select 2 in (2,4,5)

    che restituisce 1 quando 2 è presente in (2,4,5), altrimenti 0. Così però posso testare un valore per volta.

    select 2,4 in (2,4,5) non fonziona perchè restituisce 2 in ogni caso e poi esegue il test tra 4 e (2,4,5)
    Stai facendo confusione. In SQL la parola chiave in confrontra dei valori per restituire 0 (ovvero true) o 1 (ovvero false)non un valore.
    Se vuoi ricavare dei valori devi per forza usare una struttura di dati.

    L'esempio qui sotto funziona ma sarebbe molto meglio avere due vere tabelle.
    codice:
    select * from
    ( 
     select 2 as a
     union all select 3
     union all select 5
     union all select 8
     union all select 9
    ) 
    AS tabella1
    inner join
    ( 
     select 2 as b
     union all select 3
     union all select 4
     union all select 7
     union all select 9
    ) 
    AS tabella2 on tabella1.a=tabella2.b

    Puoi anche dare un'occhiata qui http://stackoverflow.com/questions/1...iable-in-mysql
    ma anche qui è molto macchinoso e non so se fa per te.
    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
    Si lo so che IN esegue un test, intendevo che in mancanza dei valori mi sarei accontentato di sapere se il valore è presente. L'esempio che hai postato funziona, ma non mi piace la complessità che ne deriva su insiemi grandi.
    ti ringrazio per la risposta

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da matteolandi Visualizza il messaggio
    Si lo so che IN esegue un test, intendevo che in mancanza dei valori mi sarei accontentato di sapere se il valore è presente. L'esempio che hai postato funziona, ma non mi piace la complessità che ne deriva su insiemi grandi.
    ti ringrazio per la risposta
    Non piace neanche a me. Ma toglimi una curiosità. Da dove provvengono i dati ? Perche non vuoi usare due tabelle ?
    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
    Sono dati derivanti da un calcolo. Se la query che restituisce il sottoinsieme cercato fosse semplice potri usarla come subquery di una query più complessa e prendere decisioni sui dati a livello del database, semplificando il codice (c++) che li usa. In generale (se la complessità del codice che ne risulta è confrontabile) preferisco delegare il più possibile al server di database

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ok. Se ricavi il sottoinsieme da una tabella, puoi inserirne il risultato in un'altra magari temporanea.
    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

Tag per questa discussione

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.