2016-06-07 17 views
-1

Ich möchte Datensätze mit UserID als NULL nur ausschließen, wenn es mindestens einen Datensatz gibt, der einen Wert enthält.SQL Server wählen basierend auf bestimmten Bedingung

Mit der obigen Abfrage kann ich das gewünschte Ergebnis erhalten, aber irgendwie fühle ich, dass es nicht der richtige Weg ist.

+0

Sie alles in einer Abfrage ohne den 'und' Teil der Join unter Verwendung einer WHERE-Klausel setzen kann. z.B. 'WHERE CASE WENN EXISTS (SELECT 1 VON @MySavedSearches WHERE BenutzerID ist nicht NULL) THEN MySearches.UserID ELSE 1 END ist NICHT NULL'. Das heißt nur: "Wenn es existiert, muss es nicht null sein, wenn es nicht ist, nimm alles." Um den "richtigen" Weg zu finden, teste einfach verschiedene Methoden und finde heraus, welche am schnellsten ausgeführt werden, denke ich. – ZLK

+0

Ihr Problem wurde behoben? –

+0

Was auch immer der Code, den ich in Frage gestellt habe, funktioniert gut. Ich möchte nur eine andere bessere Alternative wissen. – Raghuveer

Antwort

2

die Zählung zu einer Variable in und innerhalb des in dem den Check:

DECLARE @cnt int 
SELECT @cnt = count(*) FROM @MySavedSearches WHERE UserID IS NOT NULL 

SELECT SSM.* 
    FROM XYZTABLE SSM 
    JOIN @MySavedSearches MySearches ON SSM.UniqueID = MySearches.UniqueID 
      AND ((@cnt > 0 AND MySearches.UserID IS NOT NULL) OR (@cnt = 0)) 
+0

+1 Danke für diese Lösung, das ist etwas besser im Vergleich zu mir. Aber ich suche immer noch nach einem besseren Ansatz – Raghuveer

Verwandte Themen