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

原文地址:https://www.cnblogs.com/stalwart/p/1902981.html