【发布时间】:2013-08-19 20:29:10
【问题描述】:
如果某个条件为真,我想从表中选择一些行,然后如果另一个条件为真,则选择其他一些行,否则(最终)选择其他一些行。主要问题是我想从命令行插入一个参数,如下所示:
if exists(select a.* from a
left join b on a.id=b.id
where b.id=:MY_PARAMETER)
else if exists
(select c.* from c where c.id=:Another_Parameter)
else
(select * from b)
我知道我做错了什么,但我不知道是什么。我尝试使用 CASE-Then,但找不到适应该解决方案的方法。任何想法?谢谢
PS:我阅读了一些其他类似的帖子,但正如我所解释的那样,我遇到了困难。
希望我能澄清一些事情:
select
case when b.id=6
then (select * from a)
else (select a.* from a join b
on b.aid=a.aid)
end
from a join b
on b.aid=a.aid
join c
on b.id=c.bid
where b.id=:num
在这种情况下,问题在于它不允许在 CASE 语句中返回多个值。
【问题讨论】:
-
你的意思是联合查询吗?例如选择 Id,Description From A Where somecondition union Select Id,Description From B Where Someothercondition
-
不,如果某些条件为真,我想检索一些行,例如,如果 MY_PARAMETER=10,如果 MY_PARAMETER=20 选择其他一些行,如果 MY_PARAMETER 有另一个值来选择一些新行.我不想合并结果。
-
您可以使用 plsql 并使用传递的参数创建自己的查询,并使用 refcursor 打开它。
-
感谢您的回复,我是 pl/sql 的新手,所以我想通过 sql 解决这个问题,但是如果您能通过 pl/sql 帮助我解决这个问题,我将非常感谢 :)
-
那么不,你的意思是 uinion 查询吗? ...