A表
ID NAMEB表
A_ID U_CODE
==================比如A中数据有
1 张三
2 李四
3 王二
4 麻子B表数据有
1 sam
3 sam
1 rose
2 mike
表示 sam 可以访问id=1 3的a表数据, rose可以访问id=1的a表数据,mike可以访问id=2的a表数据如果对于这样的查询我们可以用inner join:
select * from a inner join b on b.a_id=a.id and u_code='sam'但是我现在想加入一个条件,如果B表中不存在的A_ID,我也需要能选择出来。
也就是说id=4的a表记录不包含在b表中,那么sam可以访问id=1 3 4的a表记录。这样的查询语句怎么写比较高效一些?谢谢!
ID NAMEB表
A_ID U_CODE
==================比如A中数据有
1 张三
2 李四
3 王二
4 麻子B表数据有
1 sam
3 sam
1 rose
2 mike
表示 sam 可以访问id=1 3的a表数据, rose可以访问id=1的a表数据,mike可以访问id=2的a表数据如果对于这样的查询我们可以用inner join:
select * from a inner join b on b.a_id=a.id and u_code='sam'但是我现在想加入一个条件,如果B表中不存在的A_ID,我也需要能选择出来。
也就是说id=4的a表记录不包含在b表中,那么sam可以访问id=1 3 4的a表记录。这样的查询语句怎么写比较高效一些?谢谢!
解决方案 »
- 查询sys.trigger$ 报错ORA-00932: 資料類型不一致
- oracle10g的sqlplus问题,急求帮助!
- 小第请教一个问题,如何查看oracle存储过程的状态
- linux下的oracle 有个y2base的进程一直在运行,这是干什么用的
- 关于ORACLE spatial的空间查询的举行查询出错?
- 这个嵌套语句该怎么写啊?
- 请教如何去掉查询结果后面的行数?
- oracle的热备份可能会产生什么样的错误?有什么样的危害?
- 请问删除操作涉及2个表时在一条sql中怎么写?谢谢!
- 请问用Oracle9作数据库开发,比较合适的电脑配置是什么样的呢?CPU用PIII 1GHz速度如何?
- 存储过程,如何传入一个数组并进行处理,有样例吗?
- oralce数据库连接不上
支持
我再写个麻烦点的代码
select * from test_a a inner join
(select * from test_b union
select id A_ID,U_code from (select * from test_a a1 where not exists(select 1 from test_b where a_id=a1.id))b1, test_b
)b on a.id=b.a_id
where b.u_code='sam'
union select * from a where a.id not in (select a_id from b group by a_id)
select * from a left join b on b.a_id=a.id and u_code='sam'
select * from test_a a inner join
(select * from test_b union
select id A_ID,U_code from (select * from test_a a1 where not exists(select 1 from test_b where a_id=a1.id))b1, test_b
)b on a.id=b.a_id
where b.u_code='sam'
其实我主要关注的就是查询的效率问题,在实际的情况b表的u_code有500个左右的时候,上面哪种可能会好些?或者有其他更好的查询方式?
select a.id, a.name, b.a_id, b.u_code
from a, b
where a.id = b.id(+)
and (b.id is null or b.u_code = 'sam')
select * from ta left join tb on ta.id=tb.a_id and tb.u_code='sam'