Возвращая ноль с ГДЕ - PullRequest
       2

Возвращая ноль с ГДЕ

2 голосов
/ 21 декабря 2010

У меня есть очень простой запрос для Access с использованием SQL, но я хочу, чтобы он возвращал значение Null, если ничего не возвращается.

Например, если я укажу

WHERE Cust_ID = "win"

Если для запроса на возврат значения Null нет "win".

Я думал, что смогу использовать ISNULL, но не смог заставить это работать.

Заранее спасибо, Зейн

Ответы [ 6 ]

2 голосов
/ 21 декабря 2010

Возвращает пустой набор, а не NULL. То, как вы определите, является ли набор пустым или заполненным, будет зависеть от того, какое клиентское программное обеспечение вы используете для взаимодействия с базой данных. Вы можете сосчитать строки в ADO.NET, чтобы увидеть, равно ли это число нулю.

1 голос
/ 24 декабря 2010

Рассмотрите возможность использования DLookup () вместо набора записей.DLookup () вернет значение Null в тех случаях, когда набор записей будет просто пустым:

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

Поскольку в моем tblInventory нет записей с InventoryID -1, он возвращает Null.

Тот же SQLоператор:

  SELECT LastName FROM tblInventory WHERE InventoryID=-1;

... возвращает пустой набор записей.

Итак, мне кажется, что DLookup () делает то, что вы хотите.Он также не требует никакого кода и может использоваться в качестве ControlSource элемента управления в форме или отчете.

0 голосов
/ 21 декабря 2010

Если никакие записи не соответствуют условию, никакие записи не будут возвращены. Вы можете заставить систему делать то, что вы хотите, присоединившись к таблице с одной записью. Но почему вы хотите этого странного поведения, а не обычного (и, как мне кажется, более разумного) отсутствия каких-либо результатов, когда ничего не совпадает.

0 голосов
/ 21 декабря 2010

Запрос всегда возвращает набор записей, который примерно соответствует списку записей.Если никакие записи не соответствуют вашему условию, возвращается пустой список , который не совпадает с 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
0 голосов
/ 21 декабря 2010

Я не уверен, что это работает в Access, но если вы не возражаете против того, чтобы в ваших результатах всегда было значение NULL, вы можете попробовать добавить "UNION ALL SELECT NULL" в ваше утверждение.

0 голосов
/ 21 декабря 2010

Чтобы получить нулевое значение в случае сбоя условия where, вам потребуется либо выполнить оператор case вокруг определения столбца, либо выполнить левое внешнее соединение вместо предложения where.

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

или

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

должно работать - но у меня нет доступа для проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...