Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    5

    Ricerca valori comuni in una tabella

    Premetto che sono nuovo di SQL, sto imparando velocemente grazie al web ma alle volte non ci arrivo.

    Il mio problema è il seguente:

    Ho 3 tabelle Articoli, Elenchi e rel_articoli_elenchi
    Le tre tabelle sono legate da una connessione molti a molti in quanto ogni articolo puo appartenere a vari elenchi e ogni elenco puo essere incluso a vari articoli.

    TABELLA Articoli
    cod_articolo descr_articolo prezzo
    TABELLA Elenchi
    cod_elenco descr_elenco
    TABELLA rel_articoli_elenchi
    ID_rel cod_articolo cod_elenco

    Es.

    articolo1 puo avere elenco bianco e nero
    articolo2 puo avere elenco nero e rosso e verde
    articolo3 puo avere elenco bianco e verde
    articolo4 puo avere elenco nero e rosso

    La mia domanda è: come strutturo la query in modo che mi ritorni solo gli articoli che soddisfano piu di un record cod_elenco? Tipo se io voglio tutti gli articoli che appartengono SIA al l'elenco bianco CHE a quello nero?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    5
    Precisazione: sto parlando di MS-Sql.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    5
    A suon di prove e query sono riuscito a trovare una soluzione che funziona, anche se non so se sia la migliore.

    Ho fatto una sequenza di AND e OR mettendo in cascata tutti i filtri che mi servivano per scremare la soluzione.

    Es.

    Se dovevo cercare il bianco e il nero,

    WHERE

    (((cod_elenco) = "bianco") And ((cod_elenco) = "nero")) OR ((cod_elenco) = "bianco")

    Se avete soluzioni migliori resto in attesa.

  4. #4
    Prova così:

    codice:
    SELECT A.COD_ARTICOLO, COUNT(DISTINCT C.COD_ELENCO) 
    FROM ARTICOLI A, REL_ARTICOLI_ELENCHI B, ELENCHI C
    WHERE A.COD_ARTICOLO=B.COD_ARTICOLO AND B.COD_ELENCO=C.COD_ELENCO
    GROUP BY A.COD_ARTICOLO
    HAVING COUNT(DISTINCT C.COD_ELENCO) > 1
    Ciao
    Mik

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    5
    Mica ti ho capito sai......

    Cosa intendi per A..B..C??

    Ho capito quello che vuoi fare, cioè ordinarle la tabella, contare i campi che si ripetono per piu di una volta e restituire quelli.
    Ma non sono riuscito a riscrivere la query in modo "utilizzabile".

  6. #6
    Cosa intendi per A..B..C??
    A, B e C sono alias assegnati alle tre tabelle. E' il modo corretto di scrivere una query che altrimenti verrebbe scritta in questo modo:

    codice:
    SELECT ARTICOLI.COD_ARTICOLO, COUNT(DISTINCT ELENCHI.COD_ELENCO) 
    FROM ARTICOLI, REL_ARTICOLI_ELENCHI, ELENCHI
    WHERE ARTICOLI.COD_ARTICOLO=REL_ARTICOLI_ELENCHI.COD_ARTICOLO AND REL_ARTICOLI_ELENCHI.COD_ELENCO=ELENCHI.COD_ELENCO
    GROUP BY ARTICOLI.COD_ARTICOLO
    HAVING COUNT(DISTINCT ELENCHI.COD_ELENCO) > 1
    Fammi sapere qual è l'errore restituito anche perchè non dovrebbe darti errori.

    Ciao
    Mik

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    5
    Si funziona tutto, per fare una prova veloce io stavo provando su ACCESS ma count(distinct) non funziona in access ho letto. :P

    Grazie ancora

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