2012-10-28 2 views
2

많은 링크 (tvlinks)를 보유하고있는 테이블과 링크 이름 (tvshows)과 일치하는 하위 문자열 목록을 포함하는 테이블이 두 개 있습니다.내부 조인의 기준과 일치하지 않는 행 선택

tvlinks: 
    id  (int 11) - primary index key 
    name (text) - name of the tv show link 
    link (text) - link to a website with information about the tv show 

tvshows: 
    id  (int 11) - primary index key 
    name (text) - name of the tv show 
    match (text) - substring to be matched against name in tvlinks table 

정확하게 동일한 이름과 다른 링크를 가진 tvlinks에 여러 행이있을 수 있습니다. 행이 중복되지 않습니다.

내가 tvshows.match이 tvlinks.name의 문자열입니다 tvlinks의 모든 행 얻기 위해 다음 쿼리를 사용

SELECT l.id, 
     l.name, 
     l.link 
    FROM tvlinks tvl 
    INNER JOIN tvshows tvs 
    ON (INSTR(tvl.name, tvs.match) 
    ORDER BY tvl.name 
; 

을하고 잘 작동, 내 문제는 내가 함께 넣어 싶습니다이다 위의 쿼리와 일치하지 않는 행만 반환하는 다른 쿼리

저는 1 주일이나 2 주일 동안 키보드를 켜거나 껐습니다. 정말 간단하다는 점이 확실합니다. : 당신의 도움이

+0

결코 테스트되지는 않았지만 jsfiddle로 보입니다 - 여기 예제를 준비 할 수 있습니다 : http://sqlfiddle.com – Reflective

답변

1

select id from tvlinks where id not in (select l.id, FROM tvlinks tvl INNER JOIN tvshows tvs ON (INSTR(tvl.name, tvs.match) ORDER BY tvl.name ;)

효율적이지, 모두가 당신의 테이블에 따라 필요하지 조건 - 문자열이 처음 나타나는 인덱스를 돌려줍니다 .

+1

감사합니다. 내 솔루션에 솔루션을 통합 할 수있었습니다. :) – Dingo

0

INSTR()에 대한

감사합니다 -

그 자체
+0

부분 문자열이 없으면 false를 반환하기 때문에 그가 말한 것처럼 작동합니다. 이를 수행하는 더 좋은 방법이 있습니다. – Michael

+0

0을 반환하고 정확한 방법은'INSTR (...)> 0' – Reflective

+0

으로 동의합니다 - mysql은 0을 false로 평가합니다 : try select * from TABLE where 0; TABLE에서 *를 선택하십시오. 여기서 1; – Michael

관련 문제