MySQL NULL вопрос - PullRequest
       5

MySQL NULL вопрос

4 голосов
/ 08 декабря 2010

СПАСИБО ВСЕМ - ОТЛИЧНЫЙ РЕЗУЛЬТАТ!

Привет всем - мне следовало объяснить более подробно - нет НИКАКОЙ строки, соответствующей этому критерию, и, следовательно, текущий результат запроса верен (т. Е. Ноль строк), но возможно ли заставить MySQL вместо этого вернуть это? 1003 *

q1     q2     q3
NULL   NULL   NULL

Я подозреваю, что не из ответов ниже!

Приветствия

H.

Привет всем,

Возможно, это действительно очень простой вопрос, но я в тупике!

У меня следующий запрос:

SELECT q1, q2, q3 FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'

Теперь, если q1, q2 и q3 пусты для NOV2010 и XYZ, результат запроса:

MySQL returned an empty result set (i.e. zero rows).

Однако мне нужно заставить MySQL вместо этого возвратить NULL, например, запрос приведет к:

q1     q2     q3
NULL   NULL   NULL

Я уверен, что это очень просто, но, как я уже сказал, я в тупике.

Спасибо

Гомер.

Ответы [ 6 ]

4 голосов
/ 08 декабря 2010

Я не думаю, что это просто - кажется очень необычной вещью хотеть быть в состоянии сделать.Если бы мне пришлось это сделать, я бы использовал LEFT JOIN:

SELECT q1, q2, q3
FROM (SELECT NULL AS foo) T1
LEFT JOIN tresults ON date = 'NOV2010' AND brand = 'XYZ'

Вот еще один подход, который будет работать, если q1 не обнуляем и вам нужна только одна строка:

SELECT q1, q2, q3 FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'
UNION ALL
SELECT NULL, NULL, NULL
ORDER BY q1 DESC
LIMIT 1
2 голосов
/ 09 декабря 2010

Если вы ожидаете только 1 или 0 строк, это должно работать

SELECT q1,q2,q3 FROM
    (
    SELECT q1, q2, q3 FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'
    UNION
    SELECT NULL AS q1, NULL AS q2 NULL AS q3 
    ) sq
ORDER BY q1 DESC LIMIT 1;
2 голосов
/ 09 декабря 2010

Как уже отмечали другие, возвращение записи "NULL", а не пустого набора результатов, когда ни один из записей не соответствует вашему запросу, является несколько необычным, и я не знаю, каким ужасно элегантным способом его поддержать. Один из вариантов - UNION ваш набор записей, как показано ниже:

SELECT q1, q2, q3 FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'
UNION
SELECT NULL AS q1, NULL AS q2, NULL AS q3

Это гарантирует, что вы всегда получите набор результатов, но это также означает, что запись «NULL» будет добавлена ​​в ваш набор результатов, даже когда первый запрос действительно возвращает записи ...

Тем не менее, согласно ответу @ ceejayoz, это будет лучше обрабатываться в логике вашего приложения. Не могли бы вы остановиться на , почему вам нужен этот результат?

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

То, что вы ожидаете, действительно должно произойти. Еще раз проверьте, что ваша база данных действительно содержит запись для NOV2010 и XYZ (может быть, O в NOV - это случайно 0 или аналогичная опечатка?)

Что происходит, когда вы делаете это?

SELECT * FROM tresults WHERE date = 'NOV2010' AND brand = 'XYZ'

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

Предполагая, что ваш вопрос точен, и у вас на самом деле есть строка с тремя значениями NULL, я ожидаю, что MySQL вернет его.Если это не так, вы можете принудительно выбрать ненулевое значение:

SELECT q1, q2, q3, 1 AS dummy
FROM tresults
WHERE date = 'NOV2010' AND brand = 'XYZ'

Если ваша БД, однако, не имеет записи в tresults, которая удовлетворяет критериям, вы СОЛ- в БД нет записи, поэтому MySQL не собирается ничего вам возвращать.

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

MySQL уже работает таким образом. Если строк ноль, строки не соответствуют предложению WHERE.

edit: По вашему обновлению, нет, я не думаю, что вы можете сделать это. В вашей логике приложения это должно быть обработано.

...