zoukankan      html  css  js  c++  java
  • 用Not Exists 代替Not In

    Not Exists允许用户使用相关子查询已排除一个表中能够与另一个表成功连接的所有记录。

    Select a.mobileid
      from Log_user a
    where not exists
      (select b.mobileid from magazineitem b
         where b.mobileid=a.mobileid);

    对于外查询的每条记录(Log_user),not exists字查询都要测试。如果这条记录于Magazineitem连接后返回一行,则子查询成功。Not Exists 通知查询对返回的代码取反,这样,Log_user 表中与Log_User连接成功的行都不为外查询返回。剩下的行就是那些在magazineitem中没有记录的。
    Not Exists用到了连接,能够发挥已经建好的索引的作用,而Not In不能使用索引。

    Not In是最慢的方式,要同每条记录比较,在数据量比较大的查询中不建议使用这种方式。

    关于Exists和IN:
    Select name,skill
      from workerstill ws
      where exists
       (select * from workskill
        where ws.name=name
         group by name
          having count(skill)>1);

    检查每个外查询的值,ExistS都要测试,如果为真,那么外查询选择一个姓名和技能

    EXISTS是存在性的一种测试,特点:
    1。不能匹配一列或者多列
    2。只能用于相关的子查询

  • 相关阅读:
    RabbitMQ知识梳理
    feign.FeignException: status 400 reading
    rabbitmq监控之消息确认ack
    Docker 安装redis mysql rabbitmq
    linux搭建GitLab
    杀死服务进程并重新启动,同时监听日志打印
    MySQL数据库连接报错
    idea: unable to import maven project
    线程池ThreadPool实战
    【2-SAT】URAL
  • 原文地址:https://www.cnblogs.com/cxd4321/p/764150.html
Copyright © 2011-2022 走看看