zoukankan      html  css  js  c++  java
  • 当子查询碰上NULL

    情景:

    现在有如图两个表,boy和girl,对应着Boy和Girl两个bean,有共同字段id、name,另外boy还有个外键grilfriend(指向girl的id)

    微信截图_20160526200905

    现在要查询所有的Boy,如果有girlfriend的话就把girl的name也取出来,赋值给boy.girl.name

    我写了一条SQL:”SELECT  b.name,g.name FROM boy b , girl g  WHERE g.id=b.girlfriend;”

    问题:

    因为有的boy有girlfriend,有的boy没有girlfriend,所以那些没有girlfriend的boy就不能跟girl表关联起来了

    这样子查询只能查询出有girlfriend的boy

    解决方案:

    UNION

    将SQL改成如下:

    “SELECT b.name,g.name FROM boy b, girl g WHERE (b.girlfriend=g.id) and (isnull(b.girlfriend)=0) UNION b.name,”null” from boy b where isnull(b.girlfriend)=1;”

    利用组合查询

    先判断boy.girlfriend存在与否,如果存在就取出bou.girlfriend.name,否则就不取出

    JOIN

    将SQL改成如下:

    “SELECT boy.id,boy.name,girl.name FROM boy LEFT JOIN girl ON girl.id=boy.girlfriend;”

    联合查询

    总结

    用JOIN的效率比用UNION要,因为UNION相当于查询两次,JOIN是SELECT的时候先判断一下

  • 相关阅读:
    kubenetes-学习
    k8s-字段
    Spring Boot集成mongodb
    synchronized关键字
    Scala手记
    Python数据结构&封装解构
    Scala基础之集合
    Scala基础之集合常用方法
    Scala(2.12)之collection基本操作
    Scala基础之集合(数组)
  • 原文地址:https://www.cnblogs.com/wewill/p/5588742.html
Copyright © 2011-2022 走看看