在MySQL中使用EXISTS

时间:2015-03-27 20:28:39

标签: mysql sql


编辑2: 我想问的是:如果我理解正确,EXISTS语句不会过滤来自关系的任何元组。那么它用于什么目的,因为它不会过滤任何元组?

修改 为了详细说明,在第一个示例中,子查询中存在以下内容:

cities_stores.store_type = stores.store_type

但据我所知,如果子查询的评估结果为TRUE,则返回的内容是所有 DISTINCT store_type s FROM stores,是吗?如果是这样,那有什么用?


Here,声明[NOT] EXISTS语句将评估为TRUEFALSE。在链接中存在的两个示例中,如果我假设第一个示例的EXISTS语句和第二个示例的NOT EXISTS语句将评估为TRUE,则示例应该等效于以下:

示例1:

SELECT DISTINCT store_type FROM stores
  WHERE TRUE;

示例2:

SELECT DISTINCT store_type FROM stores
  WHERE TRUE;

如果是这种情况,则两个查询都是等效的,只要他们的[NOT] EXISTS语句评估为TRUE即可。所以我的问题是,如何使用[NOT] EXISTS语句是有用的?他们是如何工作的?如果我说的是错的,你能否指出错误的地方并解释[NOT] EXISTS陈述如何运作?

3 个答案:

答案 0 :(得分:0)

在子查询"WHERE cities_stores.store_type = stores.store_type"中注意此语句。它是内表检查外表的地方。在示例中,cities_stores是内部表,stores是主查询中的外部表。

  

编辑2:我想问的是:如果我理解正确,EXISTS语句不会过滤关系中的任何元组。那么它用于什么目的,因为它不会过滤任何元组?

您要查找的过滤器位于子查询中 - "WHERE cities_stores.store_type = stores.store_type"。并非表'stores'中的每条记录都会从子查询返回true。

答案 1 :(得分:0)

存在的陈述与

相同
select * from mainTable
Where (select count(*) from subTable where related condition) > 0

但有一个例外,它会在第一场比赛后停止

不存在是本声明的自然延伸

答案 2 :(得分:0)

您所引用的示例使用相关的子查询。 http://en.wikipedia.org/wiki/Correlated_subquery

这是一个很好的答案,解释它背后的机制。 https://stackoverflow.com/a/11592277/2707705