如果一行匹配,请选择排除

时间:2014-11-13 10:47:12

标签: mysql select-query

我正在寻找一种通过在联接中排除结果来快速搜索表格的方法。

两个简单的表格:

table 1
- article_id
- term_id

table 2
- article_id
- loc_id

在表1中,同一个article_id可以有多行,它可以链接到多个术语。 我正在寻找一个选择查询来获取表2中的所有结果,其中loc_id 1在表1中没有一行,term_id为20。

这两个表是关于article_ids ofc。

如果我使用normale join,然后在term_id!= 20上设置一个位置,如果文章链接到term_id 19,我仍然会得到结果。

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT *
FROM table2 
WHERE loc_id = 1
AND   atricle_id not in (SELECT article_id
                         FROM table1 
                         WHERE term_id = 20)

答案 1 :(得分:0)

尝试以下

select * from table1 as t1  join  table2 as t2
on t1.article_id=t2.article_id
where t2.loc_id = 1 and t1.term_id <> 20

答案 2 :(得分:0)

您可以使用not exists内容作为

select * from table2 t2
where loc_id = 1
and not exists
(
  select 1 from table1 t1
  where 
  t1.term_id = 20
  and t1.article_id = t2.article_id

)

以下是 demo ,但数据集不同