@illaaa

Как вывести факт отсутствия данных?

Есть ли какой-то способ выводить строку с NULL-ми(с чем угодно), когда нет данных?
Я пробовал сделать временную таблицу с одной записью и сделать к ней right join, но так и не понял, что писать в условии после ON.

Update: Мой запрос всегда возвращает одну запись. В "суммарной таблице"(после всех join-ов) тысячи записей. Если никакая запись не проходит условие where, нужно чтобы возвращалось 5dcea00a2bd9e805777202.png
вместо отсутствия записей.

Возможно ли это?
  • Вопрос задан
  • 1601 просмотр
Решения вопроса 1
erge
@erge
Примус починяю
Необходимо в приложении заложить правильную логику, либо обработку количества записей, либо с эксепшн.
а по вопросу - FULL OUTER JOIN
-- выбираем несуществующую запись
SELECT pt.pid, t.id, t.text FROM (SELECT 1 AS pid) pt
  FULL OUTER JOIN (
    SELECT 1 AS pid, tt.*
      FROM tbl tt
      -- условие запроса:
      WHERE tt.id = 10
  ) AS t ON pt.pid = t.pid
;

см. пример на dbfiddle

так же и LEFT OUTER JOIN, но условие по запросу ставить внутрь скобок ( ) в подзапрос, см dbfiddle:
-- выбираем несуществующую запись
SELECT pt.pid, t.id, t.text FROM (SELECT 1 AS pid) pt
  LEFT OUTER JOIN (
    SELECT 1 AS pid, tt.*
      FROM tbl tt
      -- условие запроса:
      WHERE tt.id = 10
  ) AS t ON pt.pid = t.pid
;


можно еще UNION подзапроса с NULL , но он всегда будет вставляться.
SELECT id, text FROM tbl
WHERE id = 10
UNION
SELECT NULL, NULL
;


пример там же, выше.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Цель в общем то не ясна. Ну выкиньте эксепшен, или сформируйте свою табличку.
В общем случае если у вас нет данных, то по результатам, вам просто нечего возвращать и соответственно результат NULL.

https://docs.microsoft.com/ru-ru/sql/t-sql/languag...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы