SQL:更新多对多的中间表

时间:2016-03-23 09:43:53

标签: sql sql-server tsql sql-update many-to-many

我有表 A 和表 B 。它们之间的关系使用中间表 AB 完成,它们存储两者的ID。

Table A 

ID integer
Value varchar(MAX)

Table B 

ID integer
Value varchar(MAX)

Table AB 

AID integer
BID integer

我可以使用JOIN选择所需的数据,但如何将数据写入AB? 我的意思是,如果我得到AIDinteger的列表(作为自定义类型 Array_Integer table(ID integer)完成),BID,如何使用收到的AB列表更新BID中的关系? 我可以做很多脏事和手动工作,但我正在寻找更真实的方法。

UPD:检查pastebin上的架构 - http://pastebin.com/BeKm2h3F

2 个答案:

答案 0 :(得分:0)

如果我理解你的错误,那么这个查询应该是你需要的。

INSERT INTO AB
SELECT * FROM 
(
    -- Here you write your AID value instead of 1
    SELECT 1 AS AID
) AS a1
CROSS JOIN 
(
    -- Query that returns list if id's from table B
    SELECT ID AS BID FROM B WHERE ID < 5
)

答案 1 :(得分:0)

您可以按如下方式更新TableAB:

declare @Aid int
declare @Bid int

insert into TableA(value)
select 'abcd'
set @Aid = ident_currect('TableA')

insert into TableB(value)
select 'xyz'
set @Bid = ident_currect('TableB')

insert into TableAB  -- This will update your junction table
select @Aid,@Bid

我假设你的tableA和TableB有标识列。您也可以使用scope_identity()而不是ident_currect()