在SQL SERVER中,我建立了一个表,这个表的主键是ID,我计划在这个表中添加一个列,叫Friends,保存我的所有的好友的信息,要实现这个,是不是要新建立一个Friend表,与之前的ID关联,然后我每插入一条新的纪录,就生成一个相关的表来保存我的Friends数据?
初学编程,刚好要用到这样的知识,暂时不求深解,等基础学完再回头看书,现在只希望有高人指点一下怎么操作,能够用就行。最好是写明白实现步骤,例如:
第一步,建立一个User表,其中主键为ID;
第二步,建立一个Friend表;
第三步,建立User与Friend之间的关系;(关键是这个地方怎么弄?)
然后是几个问题:
一、这种关系建立后,是不是意味着我每在User中插入一条记录,就自动生成一个表?
二、我怎么访问这个表中的数据?SQL语句是怎样的(查询、插入、删除、更新)?
欢迎贴链接、转帖、复制,感激不尽!
------解决思路----------------------
-- create
create table Friend(fid int,userid int,name varchar(100));
需要维护Friend 这张表信息
-- 关联user表查询,好友信息
select * from User u,Friend f where u.id = f.userid
-- insert
插入时,需要获取user 表的id
-- delete
delete from Friend where userid in('xxx','xxx',...)
------解决思路----------------------
friend其实也可能是user的吧?
那就是只需要user一个表,你说的friend也都放入user表中,然后要个n-n的关系表,表格至少有3列,ID, ID_User1, ID_User2,
后两列就是user表中2个人的对应关系。
------解决思路----------------------
create table users(userid int identity primary key, name varchar(10))
go
create table friend(userid int , fid int)
go
alter table friend
add constraint fk_friend_userid foreign key (userid) references users(userid)
go
alter table friend
add constraint fk_friend_fid foreign key (fid) references users(userid)
go
insert into users(name) values
('张三'),('李四'),('王五'),('马六')
go
select * from users
go
insert into friend(userid,fid) values
(1,2),(1,3),(1,4),(2,1),(2,3),(2,4),(3,4),(4,3)
go
select a.name [用户名] ,b.name [他的好友]
from friend f
inner join users a on f.userid = a.userid
inner join users b on f.fid = b.userid
go
drop table friend
go
drop table users
go
(4 行受影响)
userid name
----------- ----------
1 张三
2 李四
3 王五
4 马六
(4 行受影响)
(8 行受影响)
用户名 他的好友
---------- ----------
张三 李四
张三 王五
张三 马六
李四 张三
李四 王五
李四 马六
王五 马六
马六 王五
(8 行受影响)