0

我有这个结构 tbl_site_urls: storage urls of a site

tbl_camp_urls:存储活动的 url,在处理完这些 url 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
4

3 回答 3

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;
于 2012-12-07T13:08:20.720 回答
1

这应该这样做:

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

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

于 2012-12-07T12:57:24.273 回答
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
于 2012-12-07T13:50:26.140 回答