oracle 两表条件查询

有表ABidmidname1111a2111f3122B4122h3C4D要求表A中M等于11表B的数据,ID是关联的先显示,,然后在进行删除要求表B显示1a1f2B2h... 有表 A B
id m id name
1 11 1 a
2 11 1 f
3 12 2 B
4 12 2 h
3 C
4 D
要求 表A 中M 等于 11 表B 的数据 , ID 是关联的
先显示,,然后在进行删除
要求表B 显示
1 a
1 f
2 B
2 h
最后删除表B 中的这些数据
展开
 我来答
eee0716
2011-01-21 · TA获得超过136个赞
知道小有建树答主
回答量:126
采纳率:0%
帮助的人:98.2万
展开全部
SELECT B.ID,B.NAME
FROM A,B
WHERE A.ID=B.ID
AND A.ID=11;也可以写成EXISTS或者IN的形式:
DELETE FROM B WHERE EXISTS (SELECT 1 FROM A WHERE A.ID=B.ID AND A.M=11 )
另外楼上哥们说的别用IN,IN会引起全表扫描,这话在下不敢苟同。而且在类似
SELECT * FROM A WHERE EXISTS (SELECT 1 FROM B WHERE A.ID=B.ID )的语句中,两表的ID字段都建立了索引,当A表的数据量远远大于B表数据量的时候,(比如A表上千万,B表几十万)上面的语句会非常慢,虽然ORACLE的解释计划中COST的数量差不多,但是事实的数据提取工作中,IN会比EXISTS快非常多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
crazylaa
2011-01-15 · TA获得超过234个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:293万
展开全部
显示:
select * from b where b.id in(select id from a where a.m=11) order by id,name;
删除:
delete from b where b.id in(select id from a where a.m=11);

要一句sql既要显示又要删除,那是不可能的!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1寻路者1
2011-01-17 · TA获得超过165个赞
知道答主
回答量:45
采纳率:0%
帮助的人:32.8万
展开全部
最好不要用IN操作,会引起全表扫描,如果数据量大,查询速度很慢。
SELECT * FROM B WHERE EXISTS(SELECT 1 FROM A WHERE A.ID = B.ID AND A.M ='11') ORDER BY B.ID ASC;

删除的是:
DELETE FROM B WHERE EXISTS(SELECT 1 FROM A WHERE A.ID = B.ID AND A.M = '11')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ddd2ed3897
2011-01-23
知道答主
回答量:41
采纳率:0%
帮助的人:7.7万
展开全部
查:select * from b where b.id in (select id from a where a.m=11) order by id,name;
删:delete from b where b.id in (select id from a where a.m=11);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式