ququjioulai
ququjioulai
采纳率0%
2013-07-01 16:38

oracle能用一条sql做判断吗?

已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • tearhero tearhero 8年前

    如果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决定于你的具体需求

    点赞 评论 复制链接分享
  • mythsaa mythsaa 8年前

    可以使用存储过程实现啊

    点赞 评论 复制链接分享
  • laibin1320 laibin1320 8年前

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

    点赞 评论 复制链接分享
  • dzwfeng 风111星 8年前

    在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(+)

    点赞 评论 复制链接分享
  • hot002 hot002 8年前

    COALESCE函数

    点赞 评论 复制链接分享
  • keithssy 54341 8年前

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

    点赞 评论 复制链接分享
  • jinnianshilongnian jinnianshilongnian 8年前

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

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

    点赞 评论 复制链接分享

相关推荐