2011-10-15 10 views
5

W większości produktów SQL, można wybrać z żadnym stole lub z manekina tabeli tak:Jak wybrać zero lub jeden rekord z manekina tabeli w Ingres

-- Oracle 
SELECT 1 FROM DUAL 

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

Czasami chcę dodać warunek z powyższym stwierdzeniem, aby odzyskać rekord 0 lub 1, w zależności od stanu

-- Oracle 
SELECT 1 FROM DUAL WHERE 1 = 0 

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

Ale powyższe nie zadziała Ingres 10.0. Jak mogę to zrobić?

+0

Ze względu na przenośność, należy rozważyć utworzenie własnego stałego pomocniczą tabelę podstawową, która jest gwarantowana, aby zawsze mieć dokładnie jeden rząd. – onedaywhen

+0

@staywhen: W niektórych przypadkach może to być dobry pomysł. Jednak w moim przypadku nie mam kontroli nad bazą danych klientów, ponieważ tworzę bibliotekę abstrakcji baz danych dla Javy (http://www.jooq.org) –

Odpowiedz

5

Nie użyłem Ingres, ale zakładam z twojego pytania, że ​​FROM jest obowiązkowe, jeśli istnieje WHERE? W tym przypadku, jak o

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

Or

SELECT CASE WHEN 1 = 0 THEN 1 ELSE 0 END 

(Ten ostatni zawsze zwróci wiersz ale pozwalają sprawdzić stan)

+0

Twoje drugie rozwiązanie nie zadziała w moim przypadku (mój przykład był nieco uproszczony), ale pierwszy będzie, oczywiście. Poczekam trochę dłużej z akceptacją, ponieważ wolę tabelę fikcyjną z powodów składniowych –

0

AFAIK katalogu systemowego iidbconstants ma tylko jeden wiersz , więc możesz tego użyć. Nie mogę myśleć o przypadku, w którym istnieje wiele wierszy, ale może chcesz dodać wyraźna w przypadku:

select distinct 1 from iidbconstants 
Executing . . . 


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


+------+ 
|col1 | 
+------+ 
+------+ 
(0 rows) 
Powiązane problemy