2011-09-02 57 views
-1

它可能做这样的事情:NVL与查询中

and zmt.mediatypeid in nvl(:P21_MEDIA, select mediatypeid from zbx.media_type) 

:P21_MEDIA是一个变量

+0

是的,我都试过了。我的问题是如果有可能做一个nvl函数内的查询,就像我放在那里的例子。 – macwadu

回答

1

是的,你可以使用CASE语句来检查条件:

and 1 = CASE 
     WHEN :P21_MEDIA IS NOT NULL THEN 
      CASE 
       WHEN zmt.mediatypeid = :P21_MEDIA THEN 1 
       ELSE 0 
      END 
     WHEN zmt.mediatypeid IN (select mediatypeid from zbx.media_type) THEN 1 
     ELSE 0 
     END 
+0

我要去试试:) – macwadu

2

是的,它被称为scalar subquery expression

select x, (select y from another_table where foo = x) from the_table 

select x from the_table where foo = (select y from another_table where bar = x) 

它只能返回一列和一行,其他都是错误。

我现在无法测试它,但我会假设你也可以在NVL之类的函数中使用它。该文档只提到它不能在GROUP BY中使用。

+0

我要试试:) – macwadu

+0

虽然我不认为你可以像这样组合NVL和IN。它只是返回一个单一的值。 – Thilo

+0

是的你的权利它不能返回多个值,@schurik选项有一些变化正在工作。坦克你的帮助 – macwadu