小弟目前有一表,需要体现好友关系,
规则如下举例:
有3(N)个用户,每个用户都与其他2(N-1)位用户为好友关系,
生成表为
ID user userfriend
1 u1 u2
2 u1 u3
3 u2 u1
4 u2 u3
5 u3 u1
6 u3 u2
这样的表可不可以通过存储过程或是什么办法批量插入?
如果N是100,那要插9900条数据,岂不是累死。小弟初级入门,望有大侠指点。
规则如下举例:
有3(N)个用户,每个用户都与其他2(N-1)位用户为好友关系,
生成表为
ID user userfriend
1 u1 u2
2 u1 u3
3 u2 u1
4 u2 u3
5 u3 u1
6 u3 u2
这样的表可不可以通过存储过程或是什么办法批量插入?
如果N是100,那要插9900条数据,岂不是累死。小弟初级入门,望有大侠指点。
SQL> insert into tt values('u1');已创建 1 行。SQL> insert into tt values('u2');已创建 1 行。SQL> insert into tt values('u3');已创建 1 行。SQL> commit;提交完成。SQL> select * from tt;NAME
----------
u1
u2
u3SQL> create table t_t as select * from tt;表已创建。
SQL> create table tttt as select rownum id,tt.name "user",t_t.name userfriend fro
m tt,t_t where tt.name<>t_t.name;表已创建。SQL> select * from tttt; ID USER USERFRIEND
---------- ---------- ----------
1 u1 u2
2 u1 u3
3 u2 u1
4 u2 u3
5 u3 u1
6 u3 u2已选择6行。
算是 笛卡尔积了。。
确实一个表就行了。drop table 关系表;create table 关系表 (姓名 varchar(10), 朋友 varchar(10));insert into 关系表
with a as (
select '才子' || to_char(rownum) as 姓名
from dual
connect by rownum <= 5
)
select a.姓名, b.姓名 as 朋友
from a
join a b on a.姓名 <> b.姓名
order by a.姓名, b.姓名
;select * from 关系表;