2017-03-17 3 views
1

Ich habe UI, wo es eine Suchfunktion gibt. Es gibt 2 Parameter in der Suche.SQL Abfrage Eingaben benötigt

Der Benutzer kann von einem der beiden params suchen das Ergebnis zu erhalten (dh entweder davon kann null sein)

ich Schwierigkeiten habe die in immer die genaue SQL (SP), wenn einer der Werte zu schreiben ist Null.

Zum Beispiel wie folgt:

declare @param1, @param2 

create table #Ids 
(
    Id bigint, 
    Name varchar(10) 
) 

--Inserting multiple ids in my temp table 
IF @param1 IS NOT NULL 
BEGIN 
    INSERT INTO #Ids (Id, Name) 
     SELECT DISTINCT Id, Name 
     FROM MainIdTable I 
     WHERE (I.Name = @param1) 
END 

SELECT 
    I.Name, S.ID, S.Value 
FROM 
    SecondTable S 
JOIN 
    #Ids I ON S.Id = P.Id 
WHERE 
    S.Date = '2012-01-06' 
    AND s.tempId = ISNULL(@param2, p.tempId) 
  • Wenn Benutzer param1 Wert eingibt, funktioniert die Suche feine
  • Wenn der Benutzer beide betritt param1 und param2 Werte, dann auch, es funktioniert

Aber wenn der Benutzer keinen param1 Wert eingibt, aber nur einen param2 Wert eingibt, funktioniert die Suche nicht .

Ich glaube, das ist, weil meine temporäre Tabelle leer ist und wenn wir einen Beitritt machen, gibt es nichts zurück.

Irgendwelche Abhilfe, um das zu erreichen?

Dank

+0

Markieren Sie die von Ihnen verwendeten dbms. Dieser Code ist produktspezifisch. – jarlh

+0

Verwenden Sie 'LEFT JOIN' – JohnHC

+0

Left Join würde mir alle Zeilen geben, während ich nur Zeilen, die mit – user1563677

Antwort

0
Select I.Name, S.ID, S.Value from 
    SecondTable S 
    LEFT JOIN #Ids I on S.Id = P.Id 
    where S.Date = '2012-01-06' 
    and s.tempId = isnull(@param2, p.tempId) 

Sie einen LEFT JOIN hier verwendet werden soll.

+0

übereinstimmen wollen Linke Join würde mir alle Zeilen geben, während ich nur Zeilen, die übereinstimmen möchten. – user1563677