2015-09-02 39 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;