2011-10-15 15 views
5

En la mayoría de los productos SQL, puedo seleccionar ninguna tabla o de una tabla ficticia como esto:Cómo seleccionar uno o ningún registro de una tabla ficticia en Ingres

-- Oracle 
SELECT 1 FROM DUAL 

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

A veces, quiero añadir una condición a la declaración anterior, con el fin de recuperar 0 ó 1 registro, dependiendo de la condición

-- Oracle 
SELECT 1 FROM DUAL WHERE 1 = 0 

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

Pero lo anterior no funciona para Ingres 10.0. ¿Cómo puedo hacerlo?

+0

Por razones de portabilidad, considere la creación de su propia tabla de base auxiliar permanente que está garantizado para siempre tener exactamente una fila. – onedaywhen

+0

@onedaywhen: En algunos casos, podría ser una buena idea. En mi caso, sin embargo, no tengo control sobre la base de datos del cliente, ya que estoy desarrollando una biblioteca de abstracción de bases de datos para Java (http://www.jooq.org) –

Respuesta

5

No he usado Ingres, pero supongo por su pregunta que un FROM es obligatorio si hay un WHERE? En ese caso, ¿qué hay de

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

O

SELECT CASE WHEN 1 = 0 THEN 1 ELSE 0 END 

(El último siempre devolverá una fila, pero permitirá comprobar una condición)

+0

Su segunda solución no funcionará en mi caso (mi ejemplo fue algo simplificado), pero el primero lo hará, por supuesto. Sin embargo, esperaré un poco más con la aceptación, ya que preferiría una tabla ficticia por razones sintácticas. –

0

yo sepa los iidbconstants catálogo del sistema sólo tiene una fila , entonces podrías usar eso No puedo pensar en un caso en el que hay múltiples filas, pero es posible que desee agregar un DISTINCT en caso de:

select distinct 1 from iidbconstants 
Executing . . . 


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


+------+ 
|col1 | 
+------+ 
+------+ 
(0 rows) 
Cuestiones relacionadas