SQL问题,两个表联合查询筛选条件的问题。

表Aidtitlecontent1标题1内容2标题2……3标题3……表Baidtagidtagname21中国12美国33中国34香港现使用selecta.*fromai... 表A
id title content

1 标题1 内容
2 标题2 ……
3 标题3 ……
表B
aid tagid tagname
2 1 中国
1 2 美国
3 3 中国
3 4 香港

现使用 select a.* from a inner join b on a.id=b.aid where b.tagname='中国' and a.id not in (select aid from b where tagname='香港')

来选出tagname带有中国但不含有香港的A表数据

请问除了使用not in 还有其他更好的方法吗?
展开
 我来答
WHITE_WIN
推荐于2017-11-25 · TA获得超过6111个赞
知道大有可为答主
回答量:3759
采纳率:50%
帮助的人:1929万
展开全部
带有中国的所有记录(ID=3时,只显示是中国的一条):
select a.* from a inner join b on a.id=b.aid where b.tagname='中国'

只有有香港,所属ID全都不显示:
select a.* from a inner join b on a.id=b.aid where b.tagname='中国' and not exists(select 1 from b as c where c.id=a.id and tagname='香港')
159159jjj
2013-04-27 · TA获得超过458个赞
知道小有建树答主
回答量:414
采纳率:0%
帮助的人:314万
展开全部
--凑热闹的
--select 表A.* from 表A
join
(
select aid from 表B
where tagname = '中国' and tagname != '香港'
) temp_B
on 表A.id = temp_B.aid
--带有中国不带有香港,额,不是政治话题,但是表B中中国和香港是并列的记录啊,有中国肯定没香港了,真的不是政治话题···
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
解0人
2013-04-27 · TA获得超过2389个赞
知道大有可为答主
回答量:1474
采纳率:83%
帮助的人:769万
展开全部
试试
select * from a where exists (select * from b where b.aid=a.id and b.tagname ='中国' and b.tagname<>'香港')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
七分淑女相
2013-04-27
知道答主
回答量:12
采纳率:0%
帮助的人:6.4万
展开全部
select * from b where tagname ='中国' and aid not in (select aid from b where tagname ='香港')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式