Как выбрать пустой набор результатов? - PullRequest
44 голосов
/ 21 сентября 2009

Я использую хранимую процедуру в MySQL с оператором CASE.

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

Пока мне удалось сделать что-то вроде:
Select NULL From users Where False

Но я должен назвать существующую таблицу, например, «пользователи» в этом примере. Это работает, но я бы предпочел более элегантный способ, который не ломается, если в конце концов используемое имя таблицы переименовывается или удаляется.

Я пробовал Select NULL Where False, но это не работает.

Использование Select NULL возвращает не пустой набор, а одну строку со столбцом с именем NULL и значением NULL.

Ответы [ 10 ]

38 голосов
/ 21 сентября 2009

В MySQL есть фиктивная таблица, называемая «dual», которую вы должны использовать.

select
    1
from
    dual
where
    false

Это всегда даст вам пустой результат.

18 голосов
/ 08 ноября 2013

Это должно работать на большинстве БД, протестированных на Postgres и Netezza:

SELECT NULL LIMIT 0;
8 голосов
/ 16 февраля 2014

T-SQL (MSSQL):

SELECT Top 0 1;
7 голосов
/ 01 июня 2010

Как насчет

 SELECT * FROM (SELECT 1) AS TBL WHERE 2=3

Проверено в myphp, и оно также работает в sqlite и, вероятно, в любом другом движке БД.

3 голосов
/ 19 июня 2015
SELECT TOP 0 * FROM [dbo].[TableName]

Это разумный подход к оператору постоянного сканирования.

3 голосов
/ 02 августа 2012

Это, вероятно, будет работать во всех базах данных.

SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;
2 голосов
/ 22 мая 2018
SELECT NULL WHERE FALSE;

работает в postgresql, mysql, подзапрос в mysql.

2 голосов
/ 21 сентября 2009

Как насчет этого?

SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'
1 голос
/ 22 августа 2012
SELECT * FROM (SELECT NULL) WHERE 0
0 голосов
/ 23 декабря 2015

В PostgreSQL простой

SELECT;

работает. Вы даже не получите столбцы с меткой «неизвестно».
Обратите внимание, однако, он по-прежнему говорит 1 извлеченная строка.

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