Как вернуть 0, если таблица пуста, 1 в противном случае - PullRequest
8 голосов
/ 10 ноября 2010

В postgreSQL, как я могу вернуть таблицу, содержащую 0, если моя таблица пуста, и таблицу, содержащую 1, если в моей таблице есть строки?

Мне нужно сделать это в SQL, не используя какой-либо другой язык

Ответы [ 7 ]

14 голосов
/ 10 ноября 2010

Использование:

SELECT CASE 
         WHEN EXISTS (SELECT * FROM foo LIMIT 1) THEN 1
         ELSE 0 
       END

РЕДАКТИРОВАНИЕ : добавлен LIMIT 1 для ускорения запроса.

13 голосов
/ 10 ноября 2010

Может быть взломом, но это работает.

SELECT count(*) FROM (SELECT 1 FROM table LIMIT 1) AS t;
  • 1, выбранный в подзапросе, может быть любым, это просто заполнитель.
  • LIMIT 1 должен сделать подзапрос очень быстрым, независимо от размера таблицы.

Редактировать: Переписано немного.Предыдущее использование LIMIT было неправильным (не помогло на больших столах, как я планировал).

2 голосов
/ 10 ноября 2010

Попробуйте:

select sign(count(*)) from mytable
0 голосов
/ 21 декабря 2017

Вы можете поместить этот запрос в хранимую процедуру с именем таблицы в качестве параметра:

CREATE OR REPLACE FUNCTION isEmpty(tableName text, OUT zeroIfEmpty integer) AS
$func$
BEGIN
EXECUTE format('SELECT COALESCE ((SELECT 1 FROM %s LIMIT 1),0)', tableName)
INTO zeroIfEmpty;
END
$func$ LANGUAGE plpgsql;

Затем запустите эту функцию следующим образом:

SELECT * FROM isEmpty('my_table_name');

Так вы можете вызвать еес любым именем вашего стола

0 голосов
/ 10 ноября 2010

SELECT, COUNT и LIMIT должны это сделать.

-- see below SELECT COUNT(*) FROM X LIMIT 1

Редактировать: В Postgres это не работает Пожалуйста, смотрите комментарии и здесь: http://postgresql.1045698.n5.nabble.com/window-function-count-and-limit-td3233588.html

Счастливый SQL'ing.

0 голосов
/ 10 ноября 2010

Может быть, это то, что вы ищете?

select min( c ) from (
select count(*) c
from mytab
union
select 1
from mytab
having count(*) > 1 )
0 голосов
/ 10 ноября 2010

Я не думаю, что это возможно, используя только SQL.Почему вы не можете использовать любой другой язык?

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