2012-10-28 57 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中可以有多行,具有完全相同的名稱和不同的鏈接。沒有重複的行。

我用下面的查詢來獲取從tvlinks所有行tvshows.match是tvlinks.name的一個子:

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

,它工作正常,我的問題是,我想放在一起另一個查詢將只返回上面查詢未匹配的行。

我一直在鍵盤上打開和關閉一兩個星期,我確信它的東西非常簡單,我失去了一個很大的方式。 :)

感謝您的幫助

+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

它的工作原理如他所說,因爲如果substring不存在,它將返回false。有更好的方法來做到這一點。 – Michael

+0

它將返回0,正確的方法是寫成INSTR(...)> 0' – Reflective

+0

約定 - mysql評估0爲false:嘗試select * from TABLE where 0;並從表中選擇*其中1; – Michael