sql 表之间多对多关系

低调的感觉 2010-08-19 10:06:24
表A:
A_ID A_Name
1 张三
2 李四
3 王五


表B:
B_ID B_Name
1 Java
2 MySql
3 C#
4 MsSql


我的意思是表A与表B之间是多对多的关系
一个人可以对应多个技能
这样的两个表之间应该怎么关联
例如我想得到的结果:

A_ID A_Name B_Name
1 张三 Java,MySql
2 李四 Java
3 王五 C#,MySql,MsSql
...全文
421 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
低调的感觉 2010-08-20
  • 打赏
  • 举报
回复
还有人知道么?
帮我解决下
duanzhi1984 2010-08-19
  • 打赏
  • 举报
回复
你少了个中间表,兄弟。。。。
Austindatabases 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jhkmnm_123 的回复:]
表A添加一个技能ID列
或者单建一张表,存放表A与表B之间的关系
[/Quote]

首先你两个表之间用任何方法去连接,不会达到你要的效果,因为他们之间没有关联字段,

同意 在表A 建立技能ID,通常是这样做的,你也可以建立多个ID字段,在以后的使用中会方便一些

例如一个人最多可以拥有的技能是 3个 你就建立3个 技能ID字段,填入对应的数字, 这样你就能

在以后的程序中

例如 1 = ‘Java“ 将这些数字变成文字

或者就建立一个字段 里面填入你要的但也要有规则但程序上处理上会比较麻烦
低调的感觉 2010-08-19
  • 打赏
  • 举报
回复
不要沉了啊 哪位能帮我解决一下
具体应该怎么操作
jhkmnm_123 2010-08-19
  • 打赏
  • 举报
回复
表A添加一个技能ID列
或者单建一张表,存放表A与表B之间的关系
低调的感觉 2010-08-19
  • 打赏
  • 举报
回复
有没有简单的方法
直接在表A后面加一个字段关联表B
然后通过sql语句得到我想到的结果呢
Austindatabases 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 just4 的回复:]
SQL code
DECLARE @a TABLE(a_id INT,a_name VARCHAR(20))
DECLARE @b TABLE(b_id INT,b_name VARCHAR(20))
DECLARE @c TABLE(a_id INT,b_id INT)
DECLARE @d TABLE(a_id INT,a_name VARCHAR(20),x_name VARCHAR……
[/Quote]

牛人 用指针解决问题, 少量数据这是完美的,如果是大量数据,不推荐。

低调的感觉 2010-08-19
  • 打赏
  • 举报
回复
楼上的几位兄弟
能否直接给出sql代码
执行出来的我想要的结果呢
就是just4 2010-08-19
  • 打赏
  • 举报
回复
DECLARE @a TABLE(a_id INT,a_name VARCHAR(20))
DECLARE @b TABLE(b_id INT,b_name VARCHAR(20))
DECLARE @c TABLE(a_id INT,b_id INT)
DECLARE @d TABLE(a_id INT,a_name VARCHAR(20),x_name VARCHAR(100))

INSERT INTO @a(a_id,a_name)
select 1,'张三' union all
select 2,'李四' union all
select 3,'王五'

INSERT INTO @b(b_id,b_name)
select 1,'Java' union all
select 2,'MySql' union all
select 3,'C#' union all
select 4,'MsSql'


INSERT INTO @c(a_id,b_id)
select 1,1 union all
select 1,4 union all
select 2,1 union all
select 3,3 union all
select 3,4 union all
select 3,2

DECLARE curcur CURSOR FOR SELECT a.a_id,a.a_name,b.b_name FROM @c AS c LEFT JOIN @a AS a ON c.a_id = a.a_id LEFT JOIN @b AS b ON c.b_id = b.b_id
DECLARE @id INT
DECLARE @name VARCHAR(20)
DECLARE @temp VARCHAR(20)

OPEN curcur
FETCH NEXT FROM curcur INTO @id,@name,@temp
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS (SELECT 1 FROM @d AS d WHERE d.a_id = @id AND d.a_name=@name) UPDATE @d SET x_name = x_name + ',' + @temp WHERE a_id=@id AND a_name=@name
ELSE INSERT INTO @d(a_id,a_name,x_name) SELECT @id,@name,@temp
FETCH NEXT FROM curcur INTO @id,@name,@temp
END

SELECT * FROM @d

/*
a_id a_name x_name
1 1 张三 Java,MsSql
2 2 李四 Java
3 3 王五 C#,MsSql,MySql
*/

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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