2017-09-03 47 views
1

例如,可以说在source专栏中,我有以下条目SQL - 选择是LIKE%......对方(所有类似的行)的%所有行

SourceFileEmbed122 
SourceFile1333 
SourceItem13366 
PreLoadSource7755 

我做一个查询SourceFile它应该匹配第1行和第2行并向我显示该行的所有列数据,但是如果我搜索示例:PreLoadSourceSourceItem它不应该显示任何内容,因为只有一行具有类似条目。

有点像一个如果包含某种东西。

基本上,我想要做的事,如: SELECT source, COUNT(*) TotalCount FROM sources GROUP BY source HAVING COUNT(*) > 1 ORDER BY COUNT(*) DESC

但查询确实喜欢,而不是LIKE%...%(像在phpMyAdmin),这导致它只有相互匹配的精确匹配,所以这样的东西:

row123/ 
row123 

不会相互匹配,将被忽略。但是如果row123的全文也都在另一个行的值中,那么我要这个MATCH来匹配。

可以说我有:

http://link.ext/dir123/file.mp3 
http://link.ext/dir123 
http://link.ext/dir123/file2.mp3 
http://link.ext/dir123 

查询应符合.../file.mp3.../file2.mp3../dir123因为行2 http://link.ext/dir123也行1,3和4

+0

你的意思是,只显示行,如果有比1轮的比赛吗? –

+0

这是一个关于在SQL查询中存在AND和OR的问题吗?我希望我是误会。 – deg

+0

@FerdinandGaspar是的显示是否有超过2个,如果它基本上“包含”的来源,就像基本上我只是想获得一个重复的检查,但更好一点,因为我的分贝中的一些行有点复杂,但导致完全相同的项目。 – user8549339

回答

1

一种方式是做与同桌内部联接, 如果你需要一个简单的计数,你可以做这样的事情:

SELECT s1.source, COUNT(*) 
FROM sources s1 
INNER JOIN sources s2 
    ON s1.id <> s2.id AND s1.source LIKE CONCAT('%', s2.source, '%') 
GROUP BY s1.source 
+0

在开始时你有一个拼写错误,但它正好满足我的需要,谢谢你:) – user8549339

1

一种方式来测试至少两场比赛是:

select s.* 
from sources s 
where s.source like '%<whatever>%' and 
     exists (select 1 
       from source s2 
       where s2.source like '%<whatever>%' and 
        s2.source <> s.source 
      );