簡體   English   中英

SQL-選擇彼此相似的%…%的所有行(所有相似的行)

[英]SQL - Select ALL rows that are LIKE%…% of each other (All Similar Rows)

例如,假設在列source我有以下條目

SourceFileEmbed122
SourceFile1333
SourceItem13366
PreLoadSource7755

我對SourceFile進行查詢,它應該匹配第1行和第2行,並向我顯示該行的所有列數據,但是如果我搜索例如: PreLoadSourceSourceItem它應該不顯示任何內容,因為只有1行具有相似的內容條目。

有點像if包含某種東西。

基本上,我想執行以下操作: SELECT source, COUNT(*) TotalCount FROM sources GROUP BY source HAVING COUNT(*) > 1 ORDER BY COUNT(*) DESC

但是查詢執行LIKE而不是LIKE%...%(類似於PHPMyAdmin),這導致查詢僅匹配彼此的完全匹配項,因此類似:

row123/
row123

不會互相匹配,將被忽略。 但是我希望這基本上可以匹配,如果row123的全文也位於另一行的值中,然后匹配。

可以說我有:

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行中。

測試至少兩場比賽的一種方法是:

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
             );

一種方法是對同一張表進行內部聯接,如果您需要簡單的計數,則可以執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM