我有这个结构 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
答案 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