oracle能用一条sql做判断吗?

比如我有三张表A B C,A里字段id是B和C里的外键,我想做的效果是查询A表某个id,如果这个id存在于B表就查询B表的数据,如果不存在就查询C表的数据,不用存储过程单SQL能写出来不?

如果A表对B、C表的关系是一对一,那建议采取dzwfeng的方式;
如果是一对多,左连接就会出现B,C表笛卡尔积,因为B,C表之间没有关联关系;
这种情况建议使用union,如:
select A.id,B.name
from A inner join B on A.id=B.id
union
select A.id,C.name
from A inner join C on A.id=C.id
注:是否使用union all决定于你的具体需求

1、如果查询的列数少 可以使用case when then

2、因为b/c二者选一,所以可以连表查 然后分组排重

很直接的就是去查每张表 有数据返回 就去查 没有就不去查
还能有什么好的想法?还是我想简单了?

COALESCE函数

在oracle可以用左关联,A和B,C关联,取B表的数据,如果B这个字段数据为空就取C表对应字段的数据。
select nvl(b.字段1,c.字段1)
from a,b,c
where a.id =b.id(+)
and a.id = c.id(+)

如果存在一个id,使得在B、C表同时存在,则楼主所求的一句sql不存在。

可以使用存储过程实现啊