求教一个简单的查询问题! 请高手帮忙

trial 2011-08-18 03:43:44
要筛选表A中的数据,经过些处理后在表A中得到了一个结果集B,我现在要查询出在A中 不在B中的数据该怎么做?
表A中没有主键
...全文
127 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
trial 2011-08-19
  • 打赏
  • 举报
回复
表中是有流水号的,

但是由于
T1.OPPO_NUMBER_N LIKE T2.PLATFORM_ID || '%'

引起的查询出来的结果集有重复记录,这个该怎么去重?
yangqm22 2011-08-19
  • 打赏
  • 举报
回复
建议你先把表整理一下,建立一个主键后再干这些事情。否则以后还是会有问题。长痛不如短痛
trial 2011-08-19
  • 打赏
  • 举报
回复
再想请问个问题

表中的数据量很庞大,有重复记录,用distinct来去重效率很低,有没有其他的办法呢?
fendou1314 2011-08-19
  • 打赏
  • 举报
回复

[Quote=引用 1 楼 hanzs 的回复:]
SQL code

--比如A、B表各3个字段col,col2,col3
select *
from A a
where not exists
(select 1 from B b where b.col1=a.col1 and b.col2=a.col2 and b.col3=a.col3) --真实表有几个字段就写几个
[/Quote]
+1
kingwinerscxp 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 trial 的回复:]
要筛选表A中的数据,经过些处理后在表A中得到了一个结果集B,我现在要查询出在A中 不在B中的数据该怎么做?
表A中没有主键
[/Quote]
选择A表中“经过些处理”的反条件行不?
jym2002 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yixilan 的回复:]
引用 1 楼 hanzs 的回复:
SQL code

--比如A、B表各3个字段col,col2,col3
select *
from A a
where not exists
(select 1 from B b where b.col1=a.col1 and b.col2=a.col2 and b.col3=a.col3) --真实表有几个字段就写几个

这个好用,效率也高……
[/Quote]
扯淡,谁说的
szc108 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luoyoumou 的回复:]
SQL code
select * from tb1 t1 where ...
minus
select * from tb1 t2 where ...

-- 表示:在查询一中存在,而在查询二中不存在的数据集合!
-- 别想那么多:巧用 minus 关键字!
[/Quote]
+1
yixilan 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hanzs 的回复:]
SQL code

--比如A、B表各3个字段col,col2,col3
select *
from A a
where not exists
(select 1 from B b where b.col1=a.col1 and b.col2=a.col2 and b.col3=a.col3) --真实表有几个字段就写几个
[/Quote]
这个好用,效率也高。
luoyoumou 2011-08-18
  • 打赏
  • 举报
回复
select * from tb1 t1 where ...
minus
select * from tb1 t2 where ...

-- 表示:在查询一中存在,而在查询二中不存在的数据集合!
-- 别想那么多:巧用 minus 关键字!
trial 2011-08-18
  • 打赏
  • 举报
回复

SELECT *
FROM (SELECT *
FROM TEMP_SHORTNUM_CDR_D A
MINUS
SELECT T1.*
FROM DM.TEMP_SHORTNUM_CDR_D T1, DMCODE.DIM_PLATFORM_TYPE T2
WHERE T1.OPPO_NUMBER_N LIKE T2.PLATFORM_ID || '%')


有36530行
SELECT *
FROM TEMP_SHORTNUM_CDR_D A

有44085行,
SELECT T1.*
FROM DM.TEMP_SHORTNUM_CDR_D T1, DMCODE.DIM_PLATFORM_TYPE T2
WHERE T1.OPPO_NUMBER_N LIKE T2.PLATFORM_ID || '%'
有8019行。

数据的数量对不上,估计是like引起的,比如 opp_number:123456 ,platfrom_id :12,123 个数 就会出现两行,怎么解决
luoyoumou 2011-08-18
  • 打赏
  • 举报
回复
with b as ( select ... 你要得到 的结果集的SQL语句 )
select * from a
minus
select * from b;
hanzs 2011-08-18
  • 打赏
  • 举报
回复

--比如A、B表各3个字段col,col2,col3
select *
from A a
where not exists
(select 1 from B b where b.col1=a.col1 and b.col2=a.col2 and b.col3=a.col3) --真实表有几个字段就写几个

17,086

社区成员

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

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