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

    MSSql problema con clausola WHERE contenente LIKE

    Ciao, ho un problema con una query e non ne esco, spero possiate essermi d'aiuto.
    La query è questa:
    "SELECT TabellaA.Field FROM TabellaA INNER JOIN TabellaB ON TabellaA.campoid=TabellaB.campoid WHERE TabellaB.campowhere='1' and TabellaB.camponome LIKE '%'".
    La query mi restituisce un recordset che contiene anche i campi dove TabellaB.campowhere='0', mi ignora completamente la prima clausola WHERE, se tolgo la seconda clausola (contenente il LIKE) il recordset che mi viene restituito è corretto.
    Il motivo del "LIKE %" sta nel fatto che a monte di questa query c'è una pagina che offre la possibilità di inserire un nome o parte di esso per effettuare la ricerca, se l'utente non inserisce niente dovrebbero essere mostrati tutti i risultati, ferma restando però la prima parte della clausola WHERE, che però viene ignorata. Inserendo una qualsiasi wildcard nella clausola LIKE la query funziona correttamente...

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao,

    ma a cosa serve la clausola scritta cosi?

    ...and TabellaB.camponome LIKE '%'

    cioè, che dovrebbe filtrare?

  3. #3
    ciao,
    prima che venga eseguita quella query ci si trova su una pagina in cui c'è la possibilità di fare una ricerca per nome o parte di esso; nel caso in cui non venga inserito niente in quel campo la query diventa "... AND TabellaB.camponome LIKE '%'" e quindi correttamente mi recupera tutti i record, senza filtro sul campo nome, ma mi ignora anche la prima parte della clausola ("WHERE TabellaB.campowhere='1'"), che è una parte fissa della query, in ogni caso deve restituirmi record che soddisfino questa prima condizione.
    Potrei fare un controllo sulla valorizzazione del campo nome e se è NULL o ="" omettere la seconda parte della clausola WHERE, ma prima volevo capire il perchè di questo "comportamento"

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    io eviterei l'inserimento nella clausola where di un field dove il parametro è NULL.

    perchè utilizzi inner join?

    http://stackoverflow.com/questions/5...-and-full-join
    Ultima modifica di 123delphi321; 20-05-2014 a 13:11

  5. #5
    Alle fine si, ho messo un controllo sulla valorizzazione o meno del campo di ricerca per nome e, nel caso sia vuoto, ometto la parte di clausola contenente il LIKE, ed ovviamente funziona a dovere. Rimango però perplesso su come mai si comportasse così nel caso di "LIKE '%'", se è sbagliata la mia logica di costruzione della query o no.
    Utilizzo inner join perchè ho bisogno di ottenere i record di TabellaA che abbiano una corrispondenza in TabellaB, laddove TabellaB.campowhere='1'.

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.