选择其他表中没有匹配的行?

时间:2012-12-07 12:53:27

标签: mysql match

我有这个结构 tbl_site_urls:存储网站的网址

tbl_camp_urls:在处理这些网址后存储广告系列的网址 tbl_site_urls

id - site_id - url
1  - 181     - url1
2  - 182     - url2
3  - 189     - url3

tbl_camp_urls

id - camp_id - site_id - url
1  - 5       - 181     - url1

如果我想列出需要处理的网址

select url from tbl_site_urls
  join site on tbl_site_urls.site_id = site.id AND site.valid=1

然后在循环操作中,我将处理后的url插入到tbl_camp_urls

我想列出尚未处理的网址。 这就像比较操作。

我期待的结果是

2  - 182     - url2
3  - 189     - url3

3 个答案:

答案 0 :(得分:4)

SELECT a.urls
FROM tbl_site_urls as a
LEFT JOIN tbl_camp_urls as b
ON a.site_id = b.site_id
WHERE b.site_id IS NULL;

答案 1 :(得分:1)

这应该这样做:

select  * from tbl_site_urls where url not in (select url from tbl_camp_urls)

(搜索子查询以获取更多信息)

答案 2 :(得分:0)

我的逻辑告诉我,你需要建立一个交集来知道公共值和一个联合来删除它们:

应该是这样的:

首先获取所有值:

(select site_id from tbl_site_urls) 
union 
(select id from site)

这就是你如何获得公共价值

(select url from tbl_site_urls inner join site on tbl_site_urls.site_id = site.id)

现在让我们将这些查询放在一起:

select * from (select site_id from tbl_site_urls 
union 
select id from site) as tem_table
where
site_id not in
(select url from tbl_site_urls inner join site on tbl_site_urls.site_id = site.id) --commons values