2 Stimmen

Rückgabe von Null mit WHERE

Ich habe eine sehr einfache Abfrage für Access mit SQL, aber ich möchte, dass sie Null zurückbringt, wenn nichts zurückgegeben wird.

Wenn ich zum Beispiel sage

WHERE Cust_ID = "win"

Wenn es keinen "Gewinn" für die Abfrage gibt, die Null zurückbringt.

Ich hatte gedacht, ich könnte ISNULL verwenden, aber es ist mir nicht gelungen, dies zum Laufen zu bringen.

Vielen Dank im Voraus Zane

2voto

Tim Punkte 5351

Es bringt eine leere Menge zurück, nicht NULL. Wie Sie feststellen, ob die Menge leer oder gefüllt ist, hängt davon ab, welche Client-Software Sie für die Schnittstelle zur Datenbank verwenden. Sie können die Zeilen in ADO.NET zählen, um zu sehen, ob die Anzahl Null ist.

1voto

David-W-Fenton Punkte 22473

Erwägen Sie die Verwendung von DLookup() anstelle eines Recordsets. DLookup() gibt unter Umständen eine Null zurück, wenn ein Recordset einfach leer wäre:

  DLookup("LastName","tblInventory","[InventoryID]=-1")

Da meine tblInventory keine Datensätze mit InventoryID -1 hat, gibt sie Null zurück.

Die gleiche SQL-Anweisung:

  SELECT LastName FROM tblInventory WHERE InventoryID=-1;

...gibt einen leeren Datensatz zurück.

Es scheint mir also, dass DLookup() das tut, was Sie wollen. Es erfordert auch keinen Code und kann als ControlSource eines Steuerelements in einem Formular oder Bericht verwendet werden.

0voto

amelvin Punkte 8819

Um eine Null zurückzubekommen, wenn eine Where-Bedingung fehlschlägt, müssen Sie entweder eine Case-Anweisung um eine Spaltendefinition oder einen Left Outer Join anstelle der Where-Klausel verwenden.

iif(Cust_id = "win", "win", null) 

ou

LEFT OUTER JOIN tablename on
tablename.cust_id = "win"

sollte funktionieren - aber ich habe Access nicht zur Verfügung, um das zu überprüfen.

0voto

TToni Punkte 8755

Ich bin mir nicht sicher, ob dies in Access funktioniert, aber wenn es Ihnen nichts ausmacht, immer eine NULL in Ihren Ergebnissen zu haben, können Sie versuchen, "UNION ALL SELECT NULL" an Ihre Anweisung anzuhängen.

0voto

Heinzi Punkte 157917

Eine Abfrage gibt immer einen Datensatz zurück, der in etwa einer Liste von Datensätzen entspricht. Wenn keine Datensätze Ihre Bedingung erfüllen, wird ein leere Liste zurückgegeben, was nicht dasselbe ist wie NULL.

Set rset = ...   ' Execute your query here '
If rset.EOF Then
    ... ' No records found '
Else
    ... ' Loop through the rset with rset.MoveNext until rset.EOF is true '
End If

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X