2017-09-03 38 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 
      );