这个sql语句怎么写?

lesni 2004-10-19 04:09:31
一组数据:
A B
---------------------
0001 1
0002 1
0003 2
0004 2
0005 2
0006 2

已知其中某条数据A=0003,怎么选出对应该条数据的B都相等的数据:
0003 2
0004 2
0005 2
0006 2

...全文
151 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lesni 2004-10-25
  • 打赏
  • 举报
回复
A是主键,就用前面的办法了,谢谢各位
biliky 2004-10-20
  • 打赏
  • 举报
回复
to liuyi8903(西西)

你没看到我说前提吗?我是在保证字段A为主键的基础上吗?A为主键与a='0003'对应的b肯定只有一个值啊。
liuyi8903 2004-10-20
  • 打赏
  • 举报
回复
如果a是唯一主键是可以的.
liuyi8903 2004-10-20
  • 打赏
  • 举报
回复
to biliky()
你的方法是不对的.换成=号以后,如果select b from tab where a='0003'多行就报错了.

所以就in是正确的.
biliky 2004-10-19
  • 打赏
  • 举报
回复
楼主的字段A是主键吗?如果是就很简单,将一楼的in改为=就行了:
select * from tab where b =(select b from tab where a='0003');
biliky 2004-10-19
  • 打赏
  • 举报
回复
东子的办法不可行。
按照东子的招,两个相似的表进行连接,a表的每条记录将与b表的每条记录进行连接,将会多出很多记录出来。以楼主的数据为例,前两条记录也满足a.m2 = b.m2 and a.m1='003'的条件。
FY2693 2004-10-19
  • 打赏
  • 举报
回复
这样的怎样
select b.m1,b.m2
from table a, table b
where a.m2 = b.m2 and a.m1='003'
bzszp 2004-10-19
  • 打赏
  • 举报
回复
我认为没什么可以优化的了。
lesni 2004-10-19
  • 打赏
  • 举报
回复
当然都可用,只是觉得有点复杂化了,不知道是不是有更优化的写法
qiurun 2004-10-19
  • 打赏
  • 举报
回复
上面的sql对你不适用?
zmgowin 2004-10-19
  • 打赏
  • 举报
回复
写法很多啊
select
a.a,a.b
from
tab_name a,
(select distinct b from tab_name where a='0003') b
where
a.b=b.b;
lesni 2004-10-19
  • 打赏
  • 举报
回复
只能这种方法吗
bzszp 2004-10-19
  • 打赏
  • 举报
回复
select * from tbname t where b=(select max(tt.b) from tbname tt where tt.a='0003');
zmgowin 2004-10-19
  • 打赏
  • 举报
回复
select * from tab where b in (select b from tab where a='0003')

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧