Ответ 1
В MySQL есть фиктивная таблица с названием "dual", которую вы должны использовать.
select
1
from
dual
where
false
Это всегда даст вам пустой результат.
Я использую хранимую процедуру в MySQL с оператором CASE.
В предложении ELSE CASE (эквивалентно по умолчанию:) я хочу выбрать и вернуть пустой набор результатов, избегая при этом ошибки SQL, не обрабатывая случай ELSE, и вместо этого возвращать пустой набор результатов, как если бы в регулярном запросе не было бы строк.
До сих пор мне удалось сделать это, используя что-то вроде: Select NULL From users Where False
Но я должен назвать существующую таблицу, такую как "пользователи" в этом примере. Он работает, но я бы предпочел более элегантный способ, который не прерывается, если в конечном итоге имя таблицы будет переименовано или опущено.
Я пробовал Select NULL Where False
, но он не работает.
Использование Select NULL
не возвращает пустой набор, а одну строку с столбцом с именем NULL и значением NULL.
В MySQL есть фиктивная таблица с названием "dual", которую вы должны использовать.
select
1
from
dual
where
false
Это всегда даст вам пустой результат.
Это должно работать на большинстве БД, проверенных на Postgres и Netezza:
SELECT NULL LIMIT 0;
Как насчет
SELECT * FROM (SELECT 1) AS TBL WHERE 2=3
Проверено в myphp, и оно также работает в sqlite и, возможно, в любом другом движке db.
T-SQL (MSSQL):
SELECT Top 0 1;
Это, вероятно, будет работать во всех базах данных.
SELECT * FROM (SELECT NULL AS col0) AS inner0 WHERE col0 IS NOT NULL;
Как насчет этого?
SELECT 'MyName' AS EmptyColumn
FROM dual
WHERE 'Me' = 'Funny'
SELECT TOP 0 * FROM [dbo].[TableName]
Это разумный подход к оператору постоянной проверки.
SELECT * FROM (SELECT NULL) WHERE 0
В PostgreSQL простой
SELECT;
работает. Вы даже не получите никаких столбцов с надписью "unknown".
Обратите внимание, однако, он все еще говорит, что получена одна строка.