这两条SQL语句的区别就是一个使用了in,一个使用了exists,查询结果不应该是一样的吗?
exists如何遗漏条件意味着永真,所以查询结果就是全部,如果你要使in和exist相同,你需要在exists中pid的条件进行关联
前面一句只要存在就行,后面一句还要满足pid相同才行,肯定不一样啊!
因为EXISTS()查询返回一个布尔值true或flase,它只在乎EXISTS()的查询中是否有记录,与具体的结果集无关,
所以按照你写的这个 ,无论是哪一行数据 EXISTS()返回值为true,所以你这里的EXISTS条件 一直都为true,都满足;
IN查询 是先把子表的字段查询出来,然后逐行检查主表该字段的值是否在子表的结果集中,如果存在 那么该条件为true
所以查出来的结果肯定不一样
你上面的exist只要子查询不为空就可以;而需要pid在子查询的结果里面。所以,下面的结果少
使用exists条件时在子查询中还需要写上关联条件,就是你的pid的字段关联。