SQL查找具有多个引用的行

Phl*_*lip 3 mysql sql

对于我们的在线订购平台,我们有一个商店提供的街道数据库.基于我们POS系统的出口.

在现实世界中,只有一家商店可以送到任何确切的街道地址.在我们的数据库中并非如此,其中街道名称在多个商店中显示.

表格是这样的 - 简化:

街道

street_id
street_name
street_from
street_to
store_id
Run Code Online (Sandbox Code Playgroud)

表中当前行的一些示例:

1, "very nice street", 1, 999, 6
2, "very nice street", 1, 999, 10
3, "random street", 1, 53, 10
4, "random street", 2, 64, 10
5, "unique street", 1, 999, 10
6, "unique street", 1, 999, 6
Run Code Online (Sandbox Code Playgroud)

关于如何获得所有行的任何想法,其中相同的街道名称被引用到两个或更多商店?在上面的例子中,我希望查询返回"非常好的街道"和"独特的街道"..我不想要"随机街道",因为它只引用了商店号#10.

因此以下SQL将返回"随机街道"

SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;
Run Code Online (Sandbox Code Playgroud)

Xav*_*ica 5

你可以做到这一点的GROUP BYHAVING:

SELECT * from streets group by street_name having count(*) > 1

这是一个工作示例:SQLFiddle.这里有一篇你可能会感兴趣的简短文章:HAVING和GROUP BY SQL子句.


根据您的编辑,将返回所需结果的查询将是:

SELECT street_name, store_id, count(*) 
FROM streets 
GROUP BY street_name
HAVING COUNT(DISTINCT store_id) > 1
Run Code Online (Sandbox Code Playgroud)

注意使用DISTINCT store_id.如果有另一个random street引用商店#10,它将无法通过因为DISTINCT.我在更新的SQLFiddle中包含了一个示例.