讨论个待查询条件的SQL写法,两个表,其中一个是外键,
A(A1,A2,A3)
B(B1,A1,B2);//A1是外键
写法1(DISTINCT):
SELECT DISTINCT A1,A2,A3 FROM A,B WHERE A.A1=B.A1(+1) AND B.B2='XX';
写法2(IN):
SELECT A1,A2,A3 FROM A WHERE A.A1 IN(SELECT B.A1 FROM B WHERE B.B2='XX');
写法3(EXIST):
SELECT A1,A2,A3 FROM A WHERE EXISTS(SELECT 1 FROM B WHERE B.B2='XX' AND A.A1=B.A1)
A(A1,A2,A3)
B(B1,A1,B2);//A1是外键
写法1(DISTINCT):
SELECT DISTINCT A1,A2,A3 FROM A,B WHERE A.A1=B.A1(+1) AND B.B2='XX';
写法2(IN):
SELECT A1,A2,A3 FROM A WHERE A.A1 IN(SELECT B.A1 FROM B WHERE B.B2='XX');
写法3(EXIST):
SELECT A1,A2,A3 FROM A WHERE EXISTS(SELECT 1 FROM B WHERE B.B2='XX' AND A.A1=B.A1)
解决方案 »
- sql优化
- 求更新不同ip的数据库且带blob字段的表的非blob字段的方法?
- 关于trigger修改记录后删除该记录
- 请教关于Oracle统计问题
- oracle 能查sql server中的nchar类型的字段吗?ora-28500
- 请教一条sql语句??????????急啊
- 為什麼我的oracle8.1.5裝上去沒有企業管理器?
- oracle 和sybase 那一个更好用
- java 连接oracle 数据库问题
- oracle 语句 增加br."OrCertNo" 这个字段 就无法正常进行分组
- 菜鸟求助:@@rowcount在Oracle中如何实现
- 写了一个函数,测试的时候总报ORA-00933,求指教
就用exists不用distinct的话
内连接跟exists一样
至于第一句的(+1)是什么意思
SELECT DISTINCT A1,A2,A3 FROM A,B WHERE A.A1=B.A1(+1) AND B.B2='XX';
取决于具体数据量。
第二第三种一样。
这个在9i以后的版本。如果不对in后面的select 语句的结果集进行聚合操作 优化器会把in 自动转化为exists。