• SQL 中in exists 和临时表用法


        最近在做项目时,遇到一个问题,同组的一位大哥,帮我解决了,先谢谢他。我写此文章来给大家参考.

        直接来看示例,先给出两张表。

     表A:

      

       表B:

      

    这是两张表。我们用表B里的两个字段来查表A的记录

    先看一下SQL 语句:

    SELECT * FROM A
    WHERE bID IN(SELECT bID FROM B) AND
    bName 
    IN(SELECT bName FROM B)

    上面是代码和结果,我用了两个IN 中间用AND来查结果,本来的意思是想取结果中的第一条记录,没想到全取出来了

    这样结果就不是我们想要的了,其实想一下,也能明白,IN里要满足条件都可以,注意再看一下查出来的结果,都满足条件,本来表A中的第一条和最后一条为空的都没查出来。

    如果你是想取这样的结果,那也可以了,可是如果是只想取第一条呢。怎么办。

    请看结果:

    上面是用EXISTS来做查询的,这样就不会出现刚上面的问题了。

    上面语句中有个select 1 from B这句,可能有不明白,你在SQL里运行一下就明白了。其实就是一个无列名的列,数据全为1,你想一下,我只查一条,不就只有一个1这条记录的数据了吗,这样执行速度也快。

    同时还可以用临时表来做。

    看结果:

    看出来了吗,把B的结果放入临时表中,用日临时表去查,可以这个示例中执行起来并没有上面的快,如果你的语过多的话,日临时表执行的速度就快了。

    而且主是代码可以少写点了,看成变量来用。这样用起来也方便!

    查询还好,如果你是在做删除操作呢,岂不是误删除了好多数据。后果可想而知!

    已下是一个临时表的文章可以看一下:http://database.51cto.com/art/200907/132827.htm

  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/stalwart/p/1902981.html
Copyright © 2020-2023  润新知