Подтвердить что ты не робот

Возвращение значения, даже если результата нет

У меня есть такой простой запрос, который возвращает не целое число с нулевым целым для данного id:

SELECT field1 FROM table WHERE id = 123 LIMIT 1;

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

У меня есть эта работа, но мне она не нравится, потому что она работает в 2 раза в том же подзапросе:

SELECT IF(EXISTS(SELECT 1 FROM table WHERE id = 123) = 1, (SELECT field1 FROM table WHERE id = 123 LIMIT 1), 0);

Он возвращает любое поле1, если строка существует, иначе 0. Любой способ улучшить это?

Спасибо!

Редактировать следующие комментарии и ответы: да, это должно быть в одном запросе, и я не могу использовать трюк count, потому что мне нужно вернуть только 1 значение (FYI Я запускаю запрос с помощью метода Java/ Spring SimpleJdbcTemplate.queryForLong()).

4b9b3361

Ответ 1

MySQL имеет функцию, возвращающую значение, если результат равен нулю. Вы можете использовать его для целого запроса:

SELECT IFNULL( (SELECT field1 FROM table WHERE id = 123 LIMIT 1) ,'not found');

Ответ 2

Когда вы ищете 1 запись (LIMIT 1), это будет работать.

(SELECT field1 FROM table WHERE id = 123) 
UNION 
(SELECT 'default_value_if_no_record')
LIMIT 1;

Может быть удобным способом отображения значений по умолчанию или указать отсутствие найденных результатов. Я использую его для отчетов.

См. также http://blogs.uoregon.edu/developments/2011/03/31/add-a-header-row-to-mysql-query-results/, чтобы использовать это для создания заголовков в отчетах.

Ответ 3

Вы можете включить count (id). Это всегда будет возвращено.

select count(field1), field1 from table where id = 123 limit 1;

http://sqlfiddle.com/#!2/64c76/4

Ответ 4

Вы можете использовать COALESCE

SELECT COALESCE(SUM(column),0)
FROM   table

Ответ 5

Сделайте поиск с помощью LEFT OUTER JOIN. Я не знаю, разрешает ли MySQL inline VALUES в предложениях соединения, но для этой цели вы можете иметь предопределенную таблицу.

Ответ 6

Со мной случилось, что мои подзапросы возвращают мне более одной строки, я решил это, добавив limit 1 к своим подзапросам. Вы также можете отфильтровать его, чтобы вернуть один результат.

A me me ocurrio que mis subconsultas me devuelven mas de una fila, lo solucione agregando un limit 1 a mis subconsultas. Tambien puedes filtrarlo para que te te regrese un solo resultado.

Ответ 7

Каф ответ работает для выбора одного столбца, если выбрать несколько столбцов, мы можем.

DECLARE a BIGINT DEFAULT 1;
DECLARE b BIGINT DEFAULT "name";

SELECT id, name from table into a,b;

Тогда нам просто нужно проверить значения a, b.