编辑2:
我想问的是:如果我理解正确,EXISTS
语句不会过滤来自关系的任何元组。那么它用于什么目的,因为它不会过滤任何元组?
修改 为了详细说明,在第一个示例中,子查询中存在以下内容:
cities_stores.store_type = stores.store_type
但据我所知,如果子查询的评估结果为TRUE
,则返回的内容是所有 DISTINCT store_type
s FROM stores
,是吗?如果是这样,那有什么用?
Here,声明[NOT] EXISTS
语句将评估为TRUE
或FALSE
。在链接中存在的两个示例中,如果我假设第一个示例的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
陈述如何运作?
答案 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