我知道这个问题的标题有点令人困惑,所以请耐心等待。 :)
我有一个带有 Person
记录的 (MySQL) 数据库。 Person
也有一个 slug 字段。不幸的是,slug 字段不是唯一的。有许多重复记录,即记录具有不同的 ID 但名字、姓氏和 slug 相同。一个 Person
也可能有 0 篇或多篇相关文章、博客条目和播客剧集。
如果这让您感到困惑,请看下面的结构图:
(来源:cbstaff.com)
我想生成符合此条件的记录列表:重复记录(即,相同的 slug 字段)对于至少有 1 篇文章、博客条目或播客剧集的人。
我有一个 SQL 查询,它将列出具有相同 slug 字段的所有记录:
SELECT
id,
first_name,
last_name,
slug,
COUNT(slug) AS person_records
FROM
people_person
GROUP BY
slug
HAVING
(COUNT(slug) > 1)
ORDER BY
last_name, first_name, id;
但这包括可能没有至少 1 篇文章、博客条目或播客的人员的记录。我可以调整它以符合第二个标准吗?
编辑:
我更新了数据库图表以简化它并使我在做什么更清楚。 (请注意,一些数据库表名称发生了变化——我之前试图从更高层次看一下结构,但有点不清楚。)
最佳答案
Select P.id, P.first_name, P.last_name, P.slug
From people_person as P
Join (
Select P1.slug
From people_person As P1
Where Exists (
Select 1
From magazine_author As ma1
Where ma1.person_id = P1.id
Union All
Select 1
From podcast_episode_guests As pod1
Where pod1.person_id = P1.Id
Union All
Select 1
From blogs_blog_authors As b1
Where b1.person_id = P1.Id
)
Group By P1.slug
Having Count(*) > 1
) As dup_slugs
On dup_slugs.slug = P.slug
Order By P.last_name, P.first_name, P.id
关于sql - 我如何使用 SQL 来选择重复记录以及相关项目的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930829/