求SQL语句2

winnet 2011-11-12 07:23:44
以前那贴意思表达有点差误,现在开新的

有二个相同结构的表A和表B,结构如下:
p_id varchar(10),p_color varhcar(10),p_size varchar(10)

现在要找出a表不存在于b表的记录,即三字段中任何一个或多个字段不相同的都是

要的是速度比较快的SQL,因为二表中数据很多

我现在在用的SQL是:
select p_id,p_color,p_size from a
where (p_id + p_color + p_size) not in (select p_id + p_color + p_size from b)

有没更快的方法?

谢谢!
...全文
92 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnet 2011-11-12
  • 打赏
  • 举报
回复
上面各位提到的速度都差不多,,算了,结贴,谢谢各位
NBDBA 2011-11-12
  • 打赏
  • 举报
回复
select * from a left join b on a.p_id = b.p_id and a.p_color = b.p_color and a.p_size = b.p_size where b.p_id is not null

语句not exists写法效率差不了多少

两表(p_id,p_color,p_size)加联合索引很关键



--小F-- 2011-11-12
  • 打赏
  • 举报
回复
select
*
from
a left join b
on
a.p_id = b.p_id and a.p_color = b.p_color and a.p_size = b.p_size
where
a.p_id is not null---连接字段加索引。
中国风 2011-11-12
  • 打赏
  • 举报
回复
select * from a where exists(select 1 from b where p_id=a.p_id and (p_color<>a.p_color or p_size<>a.p_size))
快溜 2011-11-12
  • 打赏
  • 举报
回复
这几种可以挨个试试

--1
select * from a left join b
on a.p_id = b.p_id and a.p_color = b.p_color and a.p_size = b.p_size
where a.p_id is not null
--2
select * from a
where not exists(select 1 from b
where p_id=a.p_id and p_color=a.p_color and p_size=a.p_size)
--3
select * from a except select * from b
--4
select * from a checksum(p_id,p_color,p_size) not in(select p_id,p_color,p_size from b)
中国风 2011-11-12
  • 打赏
  • 举报
回复
select p_id,p_color,p_size from a  
where checksum(p_id ,p_color , p_size) not in (select checksum(p_id, p_color , p_size) from b)

binary_checksum 或用 checksum
我腫了 2011-11-12
  • 打赏
  • 举报
回复

select p_id,p_color,p_size from a
where not exists (select p_id + p_color + p_size where (p_id + p_color + p_size)=(a.p_id + a.p_color + a.p_size))
我腫了 2011-11-12
  • 打赏
  • 举报
回复

select p_id,p_color,p_size from a
where not exists (select p_id + p_color + p_size where (p_id + p_color + p_size)<>(a.p_id + a.p_color + a.p_size))
shanguotao20 2011-11-12
  • 打赏
  • 举报
回复
from a left join b 写错了 手误。。
shanguotao20 2011-11-12
  • 打赏
  • 举报
回复
select * from b left join a on a.p_id = b.p_id and a.p_color = b.p_color and a.p_size = b.p_size where a.p_id is not null

大概意思就这个 没测 应该可以。
pengxuan 2011-11-12
  • 打赏
  • 举报
回复

select p_id,p_color,p_size from a where not exists(select 1 from b where p_id<>a.p_id and p_color<>a.p_color and p_size<>a.p_size)

试试

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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