Unter Verwendung einer Microsoft- Version von SQL ist hier meine einfache Abfrage. Wenn ich einen Datensatz abfrage, der nicht vorhanden ist, wird nichts zurückgegeben. Ich würde es vorziehen, wenn in diesem Szenario false (0) zurückgegeben wird. Suchen Sie nach der einfachsten Methode, um keine Datensätze zu berücksichtigen.
SELECT CASE
WHEN S.Id IS NOT NULL AND S.Status = 1 AND (S.WebUserId = @WebUserId OR S.AllowUploads = 1) THEN 1
ELSE 0
END AS [Value]
FROM Sites S
WHERE S.Id = @SiteId
Dies ähnelt dem von Adam Robinson, verwendet jedoch ISNULL anstelle von COUNT.
Wenn die innere Abfrage eine übereinstimmende Zeile hat, wird 1 zurückgegeben. Die äußere Abfrage (mit ISNULL) gibt dann den Wert 1 zurück. Wenn die innere Abfrage keine übereinstimmende Zeile enthält, gibt sie nichts zurück. Die äußere Abfrage behandelt dies wie NULL, sodass ISNULL am Ende 0 zurückgibt.
quelle
Dies kann ein totes Pferd sein. Eine andere Möglichkeit, 1 Zeile zurückzugeben, wenn keine Zeilen vorhanden sind, besteht darin, eine weitere Abfrage an UNION zu senden und Ergebnisse anzuzeigen, wenn diese nicht in der Tabelle vorhanden sind.
quelle
SELECT 0
) zurückgegeben hat, und dann eineSUM
Union. Einfach und leicht zu folgen.Etwas wie:
quelle
select 1
undselect 2
ich hinzugefügt habenas <colName>
Ich habe alle Antworten hier gelesen und es hat eine Weile gedauert, um herauszufinden, was los war. Das Folgende basiert auf der Antwort von Moe Sisko und einigen verwandten Forschungen
Wenn Ihre SQL-Abfrage keine Daten zurückgibt, gibt es kein Feld mit einem Nullwert, sodass weder ISNULL noch COALESCE so funktionieren, wie Sie es möchten. Bei Verwendung einer Unterabfrage erhält die Abfrage der obersten Ebene ein Feld mit einem Nullwert, und sowohl ISNULL als auch COALESCE funktionieren so, wie Sie es möchten / erwarten.
Meine Anfrage
Meine Anfrage mit Kommentaren
quelle
Sie müssen nur das WHERE durch ein LEFT JOIN ersetzen:
Mit dieser Lösung können Sie auch Standardwerte für jede Spalte zurückgeben, zum Beispiel:
quelle
Kein übereinstimmender Datensatz bedeutet, dass kein Datensatz zurückgegeben wird. Es gibt keinen Platz für den "Wert" von 0, wenn keine Datensätze gefunden werden. Sie könnten eine verrückte UNION-Abfrage erstellen, um das zu tun, was Sie wollen, aber viel, viel, viel besser, um einfach die Anzahl der Datensätze in der Ergebnismenge zu überprüfen.
quelle
Dies könnte eine Möglichkeit sein.
quelle
Was ist mit Krawatten?
quelle
quelle
@ hai-phans Antwort mit
LEFT JOIN
ist der Schlüssel, aber es könnte etwas schwierig sein, ihm zu folgen. Ich hatte eine komplizierte Abfrage, die möglicherweise auch nichts zurückgibt. Ich habe nur seine Antwort auf meine Bedürfnisse vereinfacht. Es ist einfach, Abfragen mit vielen Spalten anzuwenden.quelle
quelle