2016-07-08 13 views
2

私はパラメータを取得したい。そのパラメータを取得するための優先順位は、私がTable1でそれを探す必要がありますが、そこに存在しない場合、私はTable2でそれを探す必要があります。そうでなければ、そのパラメータはnullです(このような状況は起こらないはずですが、常に端辺の場合があります)。2つのサブクエリでInformix NVLを使用できますか?

私はこのような何か試してみたかった:

SELECT NVL(
    SELECT paramValue from Table1 
    where paramName = "paramName" and Id = "id", 
    SELECT paramValue from Table2 
    where paramName = "paramName" and Id = "id") 

をしかし、それは私に、構文エラーになります。

このようなやり方はありますか?

答えて

1

このように、括弧の独自のセットサブクエリを囲み:

SELECT NVL((SELECT Atomic_Number FROM Elements WHERE Name = 'Tungsten'), 
      (SELECT Atomic_Number FROM Elements WHERE Name = 'Helium')) 
    FROM sysmaster:informix.sysdual; 
74 
SELECT NVL((SELECT Atomic_Number FROM Elements WHERE Name = 'Wunderkind'), 
      (SELECT Atomic_Number FROM Elements WHERE Name = 'Helium')) 
    FROM sysmaster:informix.sysdual; 
2 
SELECT NVL((SELECT Atomic_Number FROM Elements WHERE Name = 'Wunderkind'), 
      (SELECT Atomic_Number FROM Elements WHERE Name = 'Helios')) 
    FROM sysmaster:informix.sysdual; 
  

最後のクエリは上の非破断空間によって模倣される出力としてNULL(空行)を生成最後の行

私は2つのテーブルから選択していません。これは構文にとって重要ではなく、サブクエリは2つの別々のテーブルと1つのテーブルで動作します。

Mac OS X 10.11.5のInformix 12.10.FC6およびCSDK 4.10.FC6でテスト済みです。

0

別の方法があります:

SELECT * FROM (
    SELECT paramValue from Table1 
    where paramName = "paramName" and Id = "id" 
    union all 
    SELECT paramValue from Table2 
    where paramName = "paramName" and Id = "id" 
) x 
LIMIT 1 

読み私見簡単です。

関連する問題