数据库行间关系

时间:2015-09-02 10:35:05

标签: mysql database database-design

有一个文章表,其中的字段为“article_id,title,year_published”。表中的数据:

------------------------------------
article_id | title | year_published
------------------------------------ 
1|Mechanical Code|2012 
2|Mechanical Code|2015 
3|Contruction Workshop|2010 
4|Contruction Workshop|2012 
5|Contruction Workshop|2013 
6|Administrative Session I|2012 
7|Administrative Session II|2014 
8|Administrative Session III|2015

我需要找出多年来存在的同一篇文章。

我查询了我的数据库以获得按标题分组的结果,其数量超过1。

  

选择标题,计数(*)作为文章组的总数   总计> 1;

但问题是标题名称可能不同,并且具有同一篇文章的版本。查看第6-8行以上的查询将不会获得管理会话。

如何处理这种关系?

2 个答案:

答案 0 :(得分:1)

您可以添加其他字段' articletype'例如,类型为整数,并将管理会话I,管理会话II和管理会话III设置为相同的文章类型。

--------------------------------------------------
article_id | title | year_published| articletype
--------------------------------------------------
1|Mechanical Code|2012|1
2|Mechanical Code|2015|1
3|Contruction Workshop|2010|2
4|Contruction Workshop|2012|2
5|Contruction Workshop|2013|2
6|Administrative Session I|2012|3
7|Administrative Session II|2014|3
8|Administrative Session III|2015|3

SQL就像这样:

select title, count(*) as total from articles group by articletype  having total > 1;

答案 1 :(得分:0)

如果你知道它是一个数字,你可以删除标题的最后一部分。像这样:

select (case when substring_index(title, ' ', -1) in ('I', 'II', 'III')
            then left(title, length(title) - locate(' ', reverse(title)))
            else title
       end) as basetitle, count(*) as total
from articles
group basetitle
having count(*) > 1;