2011-10-15 5 views
5

にダミーのテーブルから、ゼロまたは1つのレコードを選択する方法、私がいないテーブルからか、このようなダミーのテーブルから選択することができます。ほとんどのSQL製品でのIngres

-- 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では機能しません。どうしたらいいですか?

+0

常に1つを持っていることが保証され、独自の永続的な補助ベーステーブルを作成することを検討します行。 – onedaywhen

+0

@onedaywhen:場合によっては、それが良い考えかもしれません。しかし、私の場合、私はJavaのデータベース抽象化ライブラリ(http://www.jooq.org)を開発しているので、クライアントデータベースを制御することはできません –

答えて

5

私はIngresを使用していませんでしたが、WHEREがある場合、FROMは必須であると私は思いますか?およそ

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

それとも

SELECT CASE WHEN 1 = 0 THEN 1 ELSE 0 END 

(最後のものは、常にローを返すが、あなたは状態を確認することができます)

+0

私の場合、2番目の解決策は動作しません(私の例は幾分単純化されました)、最初のものは当然です。私は文法上の理由からダミーのテーブルを好むので –

0

システムカタログiidbconstants私の知る限りは、1行のみ持っているか、その場合にはあなたはそれを使うことができます。私は複数の行がある場合を考えることはできませんが、あなたはケースにDISTINCTを追加したい場合があります、移植性の理由から

select distinct 1 from iidbconstants 
Executing . . . 


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


+------+ 
|col1 | 
+------+ 
+------+ 
(0 rows) 
関連する問題