【问题标题】:Is there something similar to case statement but returns multiple rows that can be used in SELECT query?是否有类似于 case 语句但返回可用于 SELECT 查询的多行的内容?
【发布时间】:2014-08-02 17:34:55
【问题描述】:

根据输入的 'include_child' 我可以选择 where 条件吗?

实际查询:

SELECT *
  FROM table1 t
WHERE t.node_id IN (SELECT decode(:include_Child , 1 ,child_node_id, 0 , 123) 
                             FROM table2 
                            WHERE node_id IN 123 )

寻找类似的东西:

IF include_Child = 0 then
SELECT *
  FROM table1 t
WHERE t.node_id IN 123 -- do no use table2 at all

-- only when condition met then use table2
IF include_Child = 1 then
SELECT *
  FROM table1 t
WHERE t.node_id IN (select child_node from table2)

我希望在 SELECT 查询中使用它。而不是在 PL/SQL 块中。 DB版本为11g

有什么建议吗?

提前致谢!

【问题讨论】:

    标签: sql performance oracle select


    【解决方案1】:

    使用andor 怎么样?

    SELECT *
    FROM table1 t
    WHERE (:include_Child = 0 and t.node_id = 123) or
          (:include_Child = 1 and t.node_id IN (select child_node from table2) )
    

    【讨论】:

      【解决方案2】:

      这是另一种方法。

      SELECT *
      FROM table1 t
      WHERE t.node_id IN 123 -- do no use table2 at all
      AND include_Child = 0
      UNION ALL
      SELECT *
      FROM table1 t
      WHERE t.node_id IN (select child_node from table2)
      AND include_Child = 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 2013-07-19
        • 2022-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        相关资源
        最近更新 更多