选择与内部联接条件不匹配的行

时间:2012-10-28 20:25:53

标签: mysql join

我有两个表,一个包含大量链接(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
;

它工作正常,我的问题是我想把另一个查询放在一起,只返回上面查询不匹配的行。

我一直在键盘上打开和关闭一两个星期,我确信它非常简单,我在很大程度上缺失了。 :)

感谢您的帮助

2 个答案:

答案 0 :(得分: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 :(得分:0)

INSTR() - 返回第一次出现的子串的索引 - 而不是你需要的条件