编辑2:我想问的是:如果我理解正确,EXISTS语句不会从关系中过滤任何元组。那么,由于它不过滤任何元组,所以使用它是为了什么目的?
编辑:详细说明,在第一个示例中,子查询中存在以下内容:
cities_stores.store_type = stores.store_type但据我所知,如果子查询的计算结果为TRUE,那么返回的是所有DISTINCT store_type的FROM stores,对吗?如果是的话,那又有什么用呢?
这里,声明[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语句是如何工作的吗?
发布于 2015-03-27 21:48:16
您所指的示例使用关联子查询。子查询
这是一个很好的答案,解释了背后的机制。https://stackoverflow.com/a/11592277/2707705
发布于 2015-03-27 20:40:01
注意子查询"WHERE cities_stores.store_type = stores.store_type"中的这条语句。这是内表检查外表的位置。在示例中,cities_stores是内部表,存储是主查询中的外部表。
编辑2:我想问的是:如果我理解得对,一个EXISTS语句不会过滤关系中的任何元组。那么,由于它不过滤任何元组,所以使用它是为了什么目的?
您要查找的筛选器位于子查询- "WHERE cities_stores.store_type = stores.store_type"中。不是每个表“存储”中的记录都会从子查询中返回true。
发布于 2015-03-27 20:47:12
Exist语句与
select * from mainTable
Where (select count(*) from subTable where related condition) > 0但是除了一个例外,它会在第一场比赛之后停止。
不存在是这句话的自然延伸
https://stackoverflow.com/questions/29309659
复制相似问题