• sql where条件后面跟select语句的三种实现方式


    1.情景展示

      where限制条件后面如果想要加select语句的话,如何实现?

    2.原因分析

      通常情况下,where后面跟的是:clomn=值的方式,其实,=号后面也是可以使用查询语句的,但有使用限制条件,下面会说;

      使用in()或者exists()函数,则基本上没有限制条件。

    3.解决方案

      方式一:in()

      语法结构:

      where cloumn in(select clomn from table)

      适用数据库:MySQL和Oracle

      查询示例:

    select t.endno
      from cz_einvoices t
     where t.ivccode = '123'
       and t.orgcode in
           (select orgcode from cz_unitinfo where invoicingpartycode = '456') 

      更新示例:

    UPDATE CZ_EINVOICES
       SET BEGNO = '111', ENDNO = '333', CURRENTNO = '222'
     WHERE IVCCODE = '123'
       AND ORGCODE IN
           (SELECT ORGCODE FROM CZ_UNITINFO WHERE INVOICINGPARTYCODE = '456')

      方式二:exists()

      语法结构:

      from table t1 where  exists(select 1 from table t2 where t2.cloumn1 = t1.cloumn1)

      适用数据库:MySQL和Oracle

      查询示例:

    SELECT T.ENDNO
      FROM CZ_EINVOICES T
     WHERE T.IVCCODE = '123'
       AND EXISTS
           (SELECT 1 FROM CZ_UNITINFO WHERE INVOICINGPARTYCODE = '456' AND ORGCODE=T.ORGCODE)
    

    4.效果展示

      两种方式实现的效果是一致哒。

    2021-01-21

      方式三:=(select cloumn from table)

      语法结构:

      where cloumn=(select cloumn from table)

      适用数据库:MySQL和Oracle

      来自评论区园友:代码中透露着杀气

      where条件 =号后面也是可以跟select语句的;

      使用条件:

      第一,使用()包住;

      第二,select的查询结果集只能为1(只返回一条数据)。

      我自己也测试了一下,确实可行:

      ORACLE

      MYSQL

     

    5.总结

      当确定限制条件where后面字段的值具有唯一性的时候,我们可以直接用=(select 1 ...);

      当限制条件where后面字段的值可能有多个时,我们可以使用in(select ...)或exists(select ...)来实现;

      in 和 exists的区别:

      如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists;

      但如果不走索引的话,则它俩的执行效率没有太大差别。

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    js实现的hashMap
    vi编辑器常用命令汇总以及linux系统操作的命令(自己需要用到什么,经过测试正确的,会持续向上添加)
    使用conda,提示-bash: conda: command not found
    tmux常用命令
    OSError: [WinError 126] JVM DLL not found: C:Program FilesJavajdk1.8.0_131jreinserverjvm.dll
    python建立连接,获取动态地址,有缺陷
    python代码中,添加子进程的运行
    python通过建立长链接,获取动态ip,这种方式可以长时间保持连接
    ImportError: cannot import name PDFDocument
    http请求参数之Query String Parameters、Form Data、Request Payload
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14286811.html
Copyright © 2020-2023  润新知