Как выбрать ноль или одну запись из фиктивной таблицы в Ingres

В большинстве продуктов SQL я могу выбирать ни из таблицы, ни из фиктивной таблицы следующим образом:

-- Oracle
SELECT 1 FROM DUAL

-- Many other SQL products (including Ingres)
SELECT 1

Иногда я хочу добавить условие к приведенному выше оператору, чтобы получить 0 или 1 запись, в зависимости от условия.

-- Oracle
SELECT 1 FROM DUAL WHERE 1 = 0

-- Many other SQL products (but not Ingres)
SELECT 1 WHERE 1 = 0

Но вышеописанное не работает для Ingres 10.0. Как мне это сделать?


person Lukas Eder    schedule 15.10.2011    source источник
comment
Из соображений переносимости рассмотрите возможность создания собственной постоянной вспомогательной базовой таблицы, в которой всегда будет ровно одна строка.   -  person onedaywhen    schedule 17.10.2011
comment
@onedaywhen: В некоторых случаях это может быть хорошей идеей. Однако в моем случае у меня нет контроля над клиентской базой данных, так как я разрабатываю библиотеку абстракции базы данных для Java (jooq.org)   -  person Lukas Eder    schedule 17.10.2011


Ответы (2)


Я не использовал Ingres, но из вашего вопроса я предполагаю, что FROM является обязательным, если есть WHERE? В таком случае как насчет

SELECT 1 FROM (SELECT 1 AS C) AS T WHERE 1 = 0

Or

SELECT CASE WHEN 1 = 0 THEN 1 ELSE 0 END

(Последний всегда будет возвращать строку, но позволит вам проверить условие)

person Martin Smith    schedule 15.10.2011
comment
Ваше второе решение в моем случае не сработает (мой пример был несколько упрощен), но первое, конечно же, сработает. Я подожду еще немного с принятием, так как я бы предпочел фиктивную таблицу по синтаксическим причинам. - person Lukas Eder; 15.10.2011

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

select distinct 1 from iidbconstants
Executing . . .


+------+
|col1  |
+------+
|     1|
+------+
(1 row)
continue
* select distinct 1 from iidbconstants where 1 = 0
Executing . . .


+------+
|col1  |
+------+
+------+
(0 rows)
person PaulM    schedule 19.08.2014