USARE CAMPO COME CONDIZIONE "IN"

di il
3 risposte

USARE CAMPO COME CONDIZIONE "IN"

Ciao a tutti, avrei bisogno di un aiuto per questo caso:
Avendo una tabella con questi campi

Campo_A Campo_B

Pippo Rosso
Pluto Giallo
Minnie Nero

ed una seconda tabella con questo campo

Campo_C

Rosso,Giallo

come posso utilizzare il campo_C in una select tipo questa: SELECT * FROM TABELLA1 WHERE CAMPO_B IN (CAMPO_C)

Scrivendola come l'ho messa io non funziona....
Grazie in anticipo

3 Risposte

  • Re: USARE CAMPO COME CONDIZIONE "IN"

    Non mi è molto chiaro quello che vuoi ottenere.
    Tu, forse, vorresti utilizzare il CAMPO_C come fosse un elenco di valori da usare nella clausola IN per filtrare i record di TABELLA1 in base a CAMPO_B.
    Se la mia interpretazione è corretta dovresti suddividere il contenuto di CAMPO_C in righe utilizzando come carattere separatore la virgola.
    Per fare questo, SQL Server mette a disposizione la funzione STRING_SPLIT.

    Ti faccio un esempio.

    Per prima cosa, creiamo la struttura delle due tabelle ricorrendo, per semplificare le cose, alle variabili di tipo tabella.
    
    declare @TABELLA1 as table
    (
    	Campo_A varchar(50)
    	, Campo_B varchar(50)
    )
    insert into @TABELLA1(Campo_A, Campo_B) values
    	  ('Pippo', 'Rosso')
    	, ('Pluto', 'Giallo')
    	, ('Minnie', 'Nero')
    --
    declare @TABELLA2 as table
    (
    	Campo_C varchar(50)
    )
    insert into @TABELLA2(Campo_C) values
    	  ('Rosso,Giallo')
    
    Se la tua versione di SQL Server ha il dovuto livello di compatibilità, puoi usare la query seguente che dovrebbe restituire quello che hai chiesto (se ho capito bene quello che desideri).
    
    SELECT * 
    FROM @TABELLA1 
    WHERE Campo_B IN (SELECT value FROM @TABELLA2 CROSS APPLY STRING_SPLIT(Campo_C, ','))
    
    Se ho colto il tuo pensiero, ti suggerisco di approfondire le conoscenza su STRING_SPLIT .
  • Re: USARE CAMPO COME CONDIZIONE "IN"

    Soldino hai colto perfettamente quello che volevo fare!
    Grazie della dritta e volevo chiedere se la stringa del STRING_SPLIT può essere anche una select (non mi sembra).

    Grazie ancora
  • Re: USARE CAMPO COME CONDIZIONE "IN"

    kkzan ha scritto:


    Soldino hai colto perfettamente quello che volevo fare!
    Grazie della dritta e volevo chiedere se la stringa del STRING_SPLIT può essere anche una select (non mi sembra).

    Grazie ancora
    Prego, figurati.

    Si, se come subquery restituisce a sua volta una stringa compatibile con lo scenario.
    Per esempio, la query di prima. per vezzo, la potresti anche scrivere così:
    
    SELECT * 
    FROM @TABELLA1 
    WHERE Campo_B IN (SELECT value FROM @TABELLA2 CROSS APPLY STRING_SPLIT((select Campo_C from @TABELLA2), ','))
    
Devi accedere o registrarti per scrivere nel forum
3 risposte