none
Condizione WHERE tra 2 sottoinsiemi RRS feed

  • Domanda

  • Ciao a tutti
    Spero di essere chiaro.
    Vorrei scrivere una query di questo tipo:
    SELECT * FROM TbA WHERE ('aa','bb','cc') IN (STRING_SPLIT(Tags, ','))

    In pratica: se in Tags è presente o 'aa' o 'bb' o 'cc' deve restiruire la riga nel risultato.

    Altro problema: Tags è salvato nel db in questo modo aa,bb,dd,ee,gg,hh
    Ci posso essere problemi quando eseguo lo STRING_SPLIT?
    Grazie mille

    lunedì 13 marzo 2017 15:11

Risposte

  • Ciao.

    Io farei così:

    -inserisci i valori in una tabella temporanea:

    declare @tbl table (a varchar(50))
    INSERT INTO @tbl VALUES ('aa')
    INSERT INTO @tbl VALUES ('bb')
    INSERT INTO @tbl VALUES ('cc')

    - e poi li metti in join con il risultato della split string: se c'è almeno 1 riga, allora fai vedere il risultato

    declare @Tags varchar(50) = 'aa,bb,dd,ee,gg,hh'

    SELECT *
     FROM TbA
    WHERE EXISTS (SELECT tbl.a
    FROM @tbl AS tbl
    JOIN (SELECT [Item] FROM dbo.[SplitString](@Tags, ',')) AS spl ON tbl.a = spl.Item)

    Io ho usato una funzione simile (SplitString, fatta da me) ma il concetto è lo stesso.

    • Contrassegnato come risposta SviPla lunedì 13 marzo 2017 15:55
    lunedì 13 marzo 2017 15:40

Tutte le risposte

  • Ciao.

    Io farei così:

    -inserisci i valori in una tabella temporanea:

    declare @tbl table (a varchar(50))
    INSERT INTO @tbl VALUES ('aa')
    INSERT INTO @tbl VALUES ('bb')
    INSERT INTO @tbl VALUES ('cc')

    - e poi li metti in join con il risultato della split string: se c'è almeno 1 riga, allora fai vedere il risultato

    declare @Tags varchar(50) = 'aa,bb,dd,ee,gg,hh'

    SELECT *
     FROM TbA
    WHERE EXISTS (SELECT tbl.a
    FROM @tbl AS tbl
    JOIN (SELECT [Item] FROM dbo.[SplitString](@Tags, ',')) AS spl ON tbl.a = spl.Item)

    Io ho usato una funzione simile (SplitString, fatta da me) ma il concetto è lo stesso.

    • Contrassegnato come risposta SviPla lunedì 13 marzo 2017 15:55
    lunedì 13 marzo 2017 15:40
  • Puoi provare anche con un LIKE.

    SELECT * FROM TbA

    WHERE Tags LIKE '%aa%' OR Tags LIKE '%bb%' OR Tags LIKE '%cc%'

     

    mercoledì 15 marzo 2017 13:59