SQL查找具有多个引用的行

时间:2013-02-04 11:13:04

标签: mysql sql

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

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

表格是这样的 - 简化:

街道

street_id
street_name
street_from
street_to
store_id

目前在表中的行的一些示例:

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

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

因此,以下SQL将返回“random street”

SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;

2 个答案:

答案 0 :(得分:5)

您可以通过GROUP BYHAVING实现此目的:

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

这是一个工作样本:SQLFiddle。这是一篇你可能会感兴趣的简短文章:The HAVING and GROUP BY SQL clauses


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

SELECT street_name, store_id, count(*) 
FROM streets 
GROUP BY street_name
HAVING COUNT(DISTINCT store_id) > 1

请注意DISTINCT store_id的使用。如果有另一个random street引用商店#10,则由于DISTINCT而无法通过。我在updated SQLFiddle中添加了一个示例。

答案 1 :(得分:4)

试试这个,

SELECT street_name, COUNT(*)
FROM streets
GROUP BY street_name
HAVING COUNT(*) > 1;