2017-01-12 10 views
-3

의 다른 행에 반복 단어를 찾을, 정말, 우리는 단어 "사과"가 다른 행에서 반복되는 것을 볼 수 테이블을SQL : 테이블 예를 들어

id  title 
1  abcd apple 
2  adqsdd google 
3  adzdaz android 
4  gdfgdfg apple 
5  yuiyu windows 

있습니다. 나는 SQL 쿼리를 할 수있는 방법 단어가 다른 행에 반복 누구 표시됩니다, 그래서 나를 표시됩니다 : 당신의 목록이있는 경우이 작업을 수행 할 수있는 유일한 가능한 방법 "사과"

+0

[regex] (http://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp)에서 –

답변

0

입니다 말. 그렇다면 :

select w.word, count(*) 
from words w join 
    t 
    on concat(' ', t.title, ' ') like concat('% ', w.word, ' %') 
group by w.word 
having count(*) > 1; 

편집 :

당신이 말을하지 않아도,하지만 당신은 "제목"단어의 고정 번호가 알고 있다면, 당신은 가능한 단어를 생성 할 수 있습니다. 예를 들어 모든 제목의 단어 수가 4 자 이하일 경우

select w.word, count(*) 
from (select substring_index(title, ' ', 1) as word union 
     select substring_index(substring_index(title, ' ', 2), ' ', -1) union 
     select substring_index(substring_index(title, ' ', 3), ' ', -1) union 
     select substring_index(substring_index(title, ' ', 4), ' ', -1) 

    ) w join 
    t 
    on concat(' ', t.title, ' ') like concat('% ', w.word, ' %') 
group by w.word 
having count(*) > 1; 

분명히 더 긴 제목으로 일반화 할 수 있습니다.

+0

수를 계산하면 정규식이 작동하지 않고 더 빨라지려고합니다. 적은 코드? –

+0

필드 목록에 알 수없는 열 제목 – user3134277

0

GROUP BYHAVING에서이 두 가지를 선택하면 이러한 조건을 선택할 수 있습니다 (HAVING COUNT(*)>1 및 이와 유사).