Oracle表查询问题

SSH198 2012-11-13 10:17:05
test1表:
name字段值:zhangsan,lisi,wangwu;
test2表:
name字段值:zhangsan,wangwu,zhaoliu;

现在的问题是我要获得test1表中在test2表中不存在的name值(也就是lisi)。
除了用not in以外(数据量比较大性能不怎么好)。
还可以怎么写???
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
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
----------------------
1	houliu
2	lisi
小海葵1 2012-11-14
  • 打赏
  • 举报
回复
SELECT * FROM TEST1 T1 WHERE NOT EXISTS(SELECT 'X' FROM TEST2 T2 WHERE T1.NAME = T2.NAME)
linwaterbin 2012-11-14
  • 打赏
  • 举报
回复
引用 楼主 SSH198 的回复:
test1表: name字段值:zhangsan,lisi,wangwu; test2表: name字段值:zhangsan,wangwu,zhaoliu; 现在的问题是我要获得test1表中在test2表中不存在的name值(也就是lisi)。 除了用not in以外(数据量比较大性能不怎么好)。 还可以怎么写???
minus取差集,会排序,而且不忽略null吧 exists吧
软件钢琴师 2012-11-14
  • 打赏
  • 举报
回复
select name from test1 minus select name from test2

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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