2016-07-08 108 views
2

我想獲得一個參數。獲取該參數的優先級是我必須在Table1中查找它,但如果它不存在,那麼我必須在Table2中查找它。如果沒有,那麼參數爲空(這種情況不應該發生,但是,總是存在邊緣情況)。是否可以將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(空行)作爲輸出,這是由一個不間斷空格模仿在最後一行。

當然,我不是從兩張表中選擇;這對語法無關緊要,子查詢可以在兩個單獨的表上以及一個表上工作。

在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 

這是恕我直言,更易於閱讀。

相關問題