是否可以将Informix NVL与两个子查询一起使用?

时间:2016-07-08 10:37:20

标签: sql informix

我想得到一个参数。获取该参数的优先级是我必须在Table1中查找它,但如果它不存在,我必须在Table2中查找它。如果没有,那么参数为null(这种情况不应该发生,但是,总是存在边缘情况)。

我想尝试这样的事情:

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

但它给我一个语法错误。

有没有办法做这样的事情?

2 个答案:

答案 0 :(得分: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进行测试。

答案 1 :(得分: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

这是恕我直言更容易阅读。