StevePMedlem sedan mars 2003751 inlägg
Nedan är en sökningsquery.
Som det ser ut nu så söker på den % (alla specialiteter) om paramteren @VarSpeciality är tom och då dyker dubletter upp eftersom en person kan ha flera specialiteter kopplade till sig genom ett intersection table.
Jag vill enbart inkludera den FETMARKERADE delen av queryn om parametern @VarSpeciality inte är tom. Jag vill helt enkelt inte söka på specialitet om parametern är tom.
WHERE SCA.CONTACT_ID = SIEB_SWE_TST..S_CONTACT.ROW_ID AND
SIEB_SWE_TST..S_CON_ADDR.ACTIVE_FLG = 'Y' AND
SIEB_SWE_TST..S_CON_ADDR.X_ACTIVE_FLG = 'Y' AND
SIEB_SWE_TST..S_ADDR_PER.X_ACTIVE_FLG = 'Y' AND
SIEB_SWE_TST..S_CONTACT.SUPPRESS_EMAIL_FLG = 'N' AND
SIEB_SWE_TST..S_CON_ADDR.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_ADDR_PER.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.FST_NAME LIKE @VarFirstName AND
SIEB_SWE_TST..S_CONTACT.LAST_NAME LIKE @VarLastName AND
[b]C_SPEC.NAME LIKE @VarSpeciality AND[/b]
C_TYPE.NAME LIKE @VarType)
emissionMedlem sedan dec. 19996 095 inlägg
Det är ingen IF, det är en OR.
(@VarSpeciality [i]är tom[/i] OR C_SPEC.NAME LIKE @VarSpeciality) AND...
Det är tänkbart att du får stödja upp det hela med en DISTINCT.
StevePMedlem sedan mars 2003751 inlägg
emission skrev:
Det är ingen IF, det är en OR.
(@VarSpeciality [i]är tom[/i] OR C_SPEC.NAME LIKE @VarSpeciality) AND...
Det är tänkbart att du får stödja upp det hela med en DISTINCT.
Ett OR statement hjälper inte eftersom den fortfarande söker på speciality då.
Men med hjälp av DISTINCT som du sa så fungerade det utmärkt, jag la in första sökningen i en temptabell och sedan gjorde jag en DISTINCT select på allt utom speciality.
emissionMedlem sedan dec. 19996 095 inlägg
SteveP skrev:
Ett OR statement hjälper inte eftersom den fortfarande söker på speciality då.
Nej, det gör den inte, men om du har joinat in en extra tabell, så försvinner inte den i och med OR. En DISTINCT på själva bassökningen räcker, såvida du inte plockar med kolumner från den injoinade tabellen i SELECT-listan.
SteveP skrev:
Men med hjälp av DISTINCT som du sa så fungerade det utmärkt, jag la in första sökningen i en temptabell och sedan gjorde jag en DISTINCT select på allt utom speciality.
Temp-tabeller kan vara mördande för prestanda, men visst är de nödvändiga ibland. Eftersom du verkar använda en DBMS som stöder temptabeller så kan du säkert också använda s.k derived tables.
SELECT DISTINCT blablabla FROM
(
SELECT blublublu FROM ..... WHERE .....
) tabellalias