我想得到一个参数。获取该参数的优先级是我必须在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")
但它给我一个语法错误。
有没有办法做这样的事情?
答案 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
这是恕我直言更容易阅读。