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

    [Sql Server] Query con LIKE tra 2 campi

    Ciao, non so se è giusta la sezione , spero di sì :master:

    Sto impazzendo con Sql Server , devo cercare il valore di un campo all'interno di un altro campo attraverso una LIKE ma non so come fare.

    Ho la tabella tabIndirizzi dove il campo indirizzo contiene una stringa, e devo vedere se nel campo nome della tabPosizioni c'è qualcosa di simile in modo da trovare la decodifica corretta degli indirizzi.

    Se scrivo SELECT * FROM TABINDIRIZZI WHERE INDIRIZZO LIKE '%' + (SELECT NOME FROM TABPOSIZIONI) + '%' chiaramente mi dà errore... (anche usando una DISTINCT).

    Come posso risolvere questo problema? C'è sicuramente un modo per evitare di farlo manualmente

  2. #2
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,523
    Allora, il problema di fondo è che per l'esecuzione della query "esterna" tu hai bisogno di avere che quella "interna" ti restituisca UN SOLO valore (e non un intero recordset).

    Immagina ad esempio che la tabella tposizioni abbia un solo record; in questo caso il campo nome avrà un singolo valore, ad esempio "pippo" e tu potrai eseguire la query totale con un ....LIKE %PIPPO%
    Ma se ve ne sono molti ....

    Potresti, per esempio, utilizzare un cursore che, una volta eseguita la query "interna" la scorra un record alla volta, ed esegua quella esterna con il valore del campo nome preso di volta in volta.

    Qualcosa del tipo (vado a memoria...potrebbero esserci degli errori, l'importante è che sia chiaro il principio...)


    DECLARE
    @NOME_TMP VARCHAR(50) -- variabile temporanea in cui mettere il valore del campo "nome" di ogni record


    DECLARE cur_Level CURSOR LOCAL FOR

    SELECT NOME FROM TABPOSIZIONI /* selezione del campo "nome" (in linea teorica ottengo molti record e dovrò andare ad analizzarli uno alla volta */


    OPEN cur_Level
    FETCH NEXT FROM cur_Level INTO @NOME_TMP
    /* scorro il recordset ottenuto e metto il valore del campo "nome" nella mia variabile temporanea */

    CREATE TABLE #RPI_Temp( ....) /* ti crei qui una tabella temporanea di struttura uguale a quella della tua tabella "indirizzi" in cui inserirai i soli record che soddisfano la tua ricerca in modo che poi li potrai visualizzare con un solo comando */


    WHILE @@FETCH_STATUS = 0

    BEGIN

    INSERT INTO #RPI_Temp
    SELECT * FROM TABINDIRIZZI WHERE INDIRIZZO LIKE '%' + @NOME_TMP + '%'

    FETCH NEXT FROM cur_Level INTO @NOME_TMP

    END

    CLOSE cur_Level
    DEALLOCATE cur_Level


    SELECT * FROM #RPI_Temp /* ti fai visualizzare tutti i record che hai inserito in questa tabella temporanea (sono i soli il cui campo "indirizzo" contiene il campo "nome" della tabella tabposizioni) */

    Fammi sapere...

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