MySQL中EXISTS的用法
编辑2: 我想问的是:如果我理解正确,EXISTS语句不会从关系中过滤任何元组。既然它不过滤任何元组,那么它的用途是什么呢 编辑: 为了更详细地说明,在第一个示例中,子查询中包含以下内容:MySQL中EXISTS的用法,mysql,sql,Mysql,Sql,编辑2: 我想问的是:如果我理解正确,EXISTS语句不会从关系中过滤任何元组。既然它不过滤任何元组,那么它的用途是什么呢 编辑: 为了更详细地说明,在第一个示例中,子查询中包含以下内容: cities_stores.store_type = stores.store_type 但据我所知,如果子查询的计算结果为TRUE,那么将返回与存储区不同的所有存储区类型,对吗?如果是,这有什么用处 ,声明[NOT]EXISTS语句的计算结果为TRUE或FALSE。在链接中存在的两个示例中,如果我假设第一
cities_stores.store_type = stores.store_type
但据我所知,如果子查询的计算结果为TRUE,那么将返回与存储区不同的所有存储区类型,对吗?如果是,这有什么用处
,声明[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语句是如何工作的吗?请在cities\u stores.store\u type=stores.store\u type的子查询中注意此语句。它是内部表与外部表进行检查的地方。在示例中,cities_stores是主查询中的内部表,stores是外部表 编辑2:我想问的是:如果我理解正确,EXISTS语句不会从关系中过滤任何元组。既然它不过滤任何元组,那么它的用途是什么呢
您要查找的筛选器位于子查询中-其中cities\u stores.store\u type=stores.store\u type。并非表“stores”中的每个记录都会从子查询返回true Exist语句与
select * from mainTable
Where (select count(*) from subTable where related condition) > 0
但除了一个例外,它在第一场比赛后停止
notexist是该语句的自然扩展您所指的示例使用相关子查询。 这里有一个很好的答案解释了它背后的机制。
根据子查询的示例,其功能是设置与其他表没有链接的所有记录。这是一个有用的不存在的疑问,你在做什么。当EXISTS引用外部SELECT中的列时,它看起来确实有一些魔力。“我宁愿选择一个看起来更干净的加入。”饼干谢谢。事实上,如果你能有时间详细说明答案,我将非常高兴。@Utku我不确定我是否有答案。但是,如果我们假设它是一个普通的标量函数,它会被多次调用,对于外部选择中的每一行调用一次,返回一个布尔值来指示外部行是保留还是删除,那么就更容易与它和解。那么,为了解释逻辑结果,SQL Server在内部对其进行优化,使其行为类似于连接,这一事实应该是微不足道的。谢谢。事实上,我想我不能清楚地说出我想问什么。我想知道的是,据我所知,EXISTS语句不会过滤任何元组。那么它如何以及在哪里有用呢?例如,你是bookings.com,用户向你提供了一个城市和日期范围,你的任务是列出那个时代的酒店,一种方法是从以下酒店中选择:city\u ID=:city\u ID and exist选择*从availability where hotel\u ID=hotel\u FR和日期介于:START\u DATE和:END\u DATE之间的酒店,这将只列出酒店请记住投票选择您认为有用的答案。