mysql - SQL 查找具有多个引用的行

标签 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

关于如何获取所有行的任何想法,其中相同的街道名称被引用到两个或更多商店?在上面的示例中,我希望查询返回“very nice street”和“unique street”。我不想要“random street”,因为它仅引用了 10 号商店。

因此下面的 SQL 将返回“random street”

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

最佳答案

您可以通过GROUP BYHAVING 实现这一点:

SELECT * from streets group by street_name 有 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 中包含了一个示例.

关于mysql - SQL 查找具有多个引用的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14685557/

相关文章:

php - mysqldump - 定时任务

mysql - 获取 mySQL 工作台查询的平均时间

mysql - 基本存储过程返回错误

sql - Firebird SQL 中列的绝对最大值比较

php - MySQL PHP undefined offset 错误

php - 当前位置是否在表中存储的项目半径内?

mysql - 如何将 Excel 或 CSV 文件中的多个空格转换为段落?

php - 比较 laravel 中的列

mysql - 表数据量大时提高查询性能

mysql - SQL NOT IN, != 使用什么?