首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

Oracle表查询有关问题

2012-12-22 
Oracle表查询问题test1表:name字段值:zhangsan,lisi,wangwutest2表:name字段值:zhangsan,wangwu,zhaoliu

Oracle表查询问题
test1表:
name字段值:zhangsan,lisi,wangwu;
test2表:
name字段值:zhangsan,wangwu,zhaoliu;

现在的问题是我要获得test1表中在test2表中不存在的name值(也就是lisi)。
除了用not in以外(数据量比较大性能不怎么好)。
还可以怎么写???
[最优解释]
select name from test1
minus
select name from test2
[其他解释]

引用:
test1表:
name字段值:zhangsan,lisi,wangwu;
test2表:
name字段值:zhangsan,wangwu,zhaoliu;

现在的问题是我要获得test1表中在test2表中不存在的name值(也就是lisi)。
除了用not in以外(数据量比较大性能不怎么好)。
还可以怎么写???


minus取差集,会排序,而且不忽略null吧
exists吧
[其他解释]
SELECT * FROM TEST1 T1 WHERE NOT EXISTS(SELECT 'X' FROM TEST2 T2 WHERE T1.NAME = T2.NAME)
[其他解释]
with t1 as
(
     select 'zhangsan' c1 from dual
     union all
     select 'lisi' c1 from dual
     union all
     select 'wangwu' c1 from dual
     union all
     select 'houliu' c1 from dual
),t2 as
(
     select 'zhangsan' c2 from dual
     union all
     select 'wangwu' c2 from dual
     union all
     select 'zhaoliu' c2 from dual
)
select c1
from 
(
select c1,c2
from t1 left join t2 on c1 = c2
)
where c2 is null


     c1
----------------------
1houliu
2lisi

热点排行
Bad Request.