2011-10-15 7 views
5

Nella maggior parte dei prodotti di SQL, posso scegliere tra nessuna tabella o da una tabella fittizia come questo:Come selezionare zero o un record da una tabella fittizia in Ingres

-- Oracle 
SELECT 1 FROM DUAL 

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

A volte, voglio aggiungere una condizione la dichiarazione di cui sopra, al fine di recuperare 0 o 1 registro, a seconda della condizione

-- Oracle 
SELECT 1 FROM DUAL WHERE 1 = 0 

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

ma quanto sopra non funziona per Ingres 10.0. Come posso farlo?

+0

Per ragioni di portabilità, è consigliabile creare la propria tabella di base ausiliaria permanente che è garantito per avere sempre esattamente un riga. – onedaywhen

+0

@onedaywhen: In alcuni casi, potrebbe essere una buona idea. Nel mio caso, tuttavia, non ho il controllo sul database del client, poiché sto sviluppando una libreria di astrazione del database per Java (http://www.jooq.org) –

risposta

5

Non ho usato Ingres, ma presumo dalla tua domanda che uno FROM è obbligatorio se c'è un WHERE? In tal caso, come su

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

O

SELECT CASE WHEN 1 = 0 THEN 1 ELSE 0 END 

(L'ultimo restituirà sempre una fila, ma permetterà di controllare una condizione)

+0

La tua seconda soluzione non funzionerà nel mio caso (il mio esempio è stato un po 'semplificato), ma il primo sarà, ovviamente. Aspetterò ancora un po 'con l'accettazione, perché preferirei un tavolo fittizio per ragioni sintattiche –

0

per quanto ne so i iidbconstants catalogo di sistema ha solo una riga , quindi potresti usarlo. Non riesco a pensare ad un caso in cui non ci sono più righe, ma si consiglia di aggiungere un DISTINCT nel caso in cui:

select distinct 1 from iidbconstants 
Executing . . . 


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


+------+ 
|col1 | 
+------+ 
+------+ 
(0 rows) 
Problemi correlati