据我所知,当子查询包含至少一行时,EXISTS 返回 true,而如果子查询不返回任何内容,则 NOT EXIST 返回 true。因此,对于给定的子查询,两者中的任何一个都应该返回 true,对吗?例如: 1) 这会返回一个或多个城市有什么样的商店?
SELECT DISTINCT store_type FROM stores
WHERE EXISTS
(SELECT *
FROM cities_stores
WHERE cities_stores.store_type = stores.store_type);
2)这又回到了没有城市有什么样的商店?
SELECT DISTINCT store_type FROM stores
WHERE NOT EXISTS
(SELECT *
FROM cities_stores
WHERE cities_stores.store_type = stores.store_type);
那么同一个子查询如何为这两个查询提供输出呢?因为一个使用 EXIST 而另一个使用 NOT EXIST?
我从 http://dev.mysql.com/doc/refman/5.1/en/exists-and-not-exists-subqueries.html中获取了示例
另外 2 NOT EXISTS 在这里有什么帮助?这不是一种OR吗?3)这会返回所有城市都有什么样的商店?
SELECT DISTINCT store_type FROM stores s1
WHERE NOT EXISTS (
SELECT * FROM cities
WHERE NOT EXISTS (
SELECT * FROM cities_stores
WHERE cities_stores.city = cities.city
AND cities_stores.store_type = stores.store_type));