查询两个表中的字段是否有交集

fengyun595 2015-07-15 11:04:13
sqlserver和oracle下如何查询两个表中的字段是否有交集?
例如
表A 表B
aa bb
1,2,3 2,3
11 11,22,13,2,3

这样表A的(1,2,3)中的2和3 与表B的(2,3)有交集,11和(11,22,13,2,3)有交集

sqlserver和oracle有什么方法可以判断呢?
...全文
450 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyun595 2015-07-16
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:

-- sql server 
create table a(a varchar(20)) 
go
create table b(b varchar(20))
go
insert into a values('aa'),('1,2,3'),('11')
go
insert into b values('bb'),('2,3'),('11,22,13,2,3')
go
select * 
from a , b 
where a.a like '%' + b.b + '%'
or b.b like '%' + a.a + '%'
go
drop table a ,b 
go


(3 行受影响)

(3 行受影响)
a                    b
-------------------- --------------------
1,2,3                2,3
11                   11,22,13,2,3

(2 行受影响)



--oracle 
SQL> create table a(a varchar(20)) ;

表已创建。

SQL> create table b(b varchar(20)) ;

表已创建。

SQL> begin
  2  insert into a values('aa');
  3  insert into a values('1,2,3');
  4  insert into a values('11');
  5  insert into b values('bb');
  6  insert into b values('2,3');
  7  insert into b values('11,22,13,2,3');
  8  end ;
  9  /

PL/SQL 过程已成功完成。

SQL> select a.a , b.b
  2  from a ,b
  3  where a.a like '%' || b.b || '%'
  4  or b.b like '%' || a.a || '%'
  5  /

A                    B
-------------------- --------------------
1,2,3               2,3
11                   11,22,13,2,3

SQL> drop table a ;

表已删除。

SQL> drop table b ;

表已删除。

SQL>
SQL>
这种的话A表中 ‘1’ 也会和B表中‘12,11,32’有交集,规则上应该是没有交集才对
卖水果的net 2015-07-15
  • 打赏
  • 举报
回复

-- sql server 
create table a(a varchar(20)) 
go
create table b(b varchar(20))
go
insert into a values('aa'),('1,2,3'),('11')
go
insert into b values('bb'),('2,3'),('11,22,13,2,3')
go
select * 
from a , b 
where a.a like '%' + b.b + '%'
or b.b like '%' + a.a + '%'
go
drop table a ,b 
go


(3 行受影响)

(3 行受影响)
a                    b
-------------------- --------------------
1,2,3                2,3
11                   11,22,13,2,3

(2 行受影响)



--oracle 
SQL> create table a(a varchar(20)) ;

表已创建。

SQL> create table b(b varchar(20)) ;

表已创建。

SQL> begin
  2  insert into a values('aa');
  3  insert into a values('1,2,3');
  4  insert into a values('11');
  5  insert into b values('bb');
  6  insert into b values('2,3');
  7  insert into b values('11,22,13,2,3');
  8  end ;
  9  /

PL/SQL 过程已成功完成。

SQL> select a.a , b.b
  2  from a ,b
  3  where a.a like '%' || b.b || '%'
  4  or b.b like '%' || a.a || '%'
  5  /

A                    B
-------------------- --------------------
1,2,3               2,3
11                   11,22,13,2,3

SQL> drop table a ;

表已删除。

SQL> drop table b ;

表已删除。

SQL>
SQL>
陈灬风 2015-07-15
  • 打赏
  • 举报
回复
create table a ( name varchar2(20) ); insert into a (name) values ('aa'); insert into a (name) values ('1,2,3'); insert into a (name) values ('11'); commit; create table b ( name varchar2(20) ); insert into b (name) values ('bb'); insert into b (name) values ('2,3'); insert into b (name) values ('11,22,13,2,3'); commit; 查找交集 select a.name, b.name from a,b where regexp_like(a.name,b.name) union select a.name, b.name from a,b where regexp_like(b.name,a.name)

17,078

社区成员

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

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