2015-09-02 41 views
0

有一个文章表,其中有一个字段为“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

选择标题,COUNT(*)为总从文章群;

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

如何处理这种类型的关系?

+1

您需要修复名称。除非您可以指定所需的规则,否则SQL查询无法为您执行此操作。 –

+0

@戈登林诺夫:我不能改变标题。我可以创建一个新表格。在那种情况下如何处理这种情况? – AnkiiG

+0

@AnkiiGangrade:是否存在任何指定“article_id”6,7,&8属于同一文章组或共享共同属性的表? – seahawk

回答

1

您可以添加例如integer类型的其他字段'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; 
+0

我用一点点不同的方式使用了相同的方法..谢谢 – AnkiiG

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;