我有一个表,其中最重要的信息是它是自动递增的,数据库中的其他字段不相关。在将数据插入表之前,我创建了一个"助手"。
我有一个这样的第二个表——同样最重要的信息是ID是自动递增的,其他数据与这个例子无关。在本例中,我还创建了一个辅助表,用于存储该表中新创建的ID值。
现在我想把辅助表1和辅助表2中的值插入到第三个表中,这个表将从辅助表1和辅助表2中获取最小的ID,并将它们作为记录插入到第三个表中,例如:记录第三个表的ID |第一个表的最小ID |第三个表的最小ID。
我不知道如何在我的情况下构建查询结构-有人能给我一些建议,或现成的(不同)代码遵循?
我代码:
DECLARE @inserted1 TABLE (contact_id udt_id)
INSERT INTO t_usr_contact (contact_firstname, contact_lastname)
OUTPUT INSERTED.contact_id INTO @inserted1(contact_id)
SELECT
'Firma',
'Temporary_value'
FROM t_sup_supplier AS sup
WHERE sup.sup_id IN (175,176) AND sup.grp_id IS null
DECLARE @inserted2 TABLE (grp_id udt_id)
INSERT INTO t_usr_group (grp_label_en)
OUTPUT INSERTED.grp_id INTO @inserted2(grp_id)
SELECT
'Supplier contact'
FROM t_sup_supplier AS sup2
WHERE sup2.sup_id IN (175,176) AND sup2.grp_id IS null
INSERT INTO t_usr_contact_group (grp_id, contact_id)
我想用最简单的方法,如下所示,但是行不通:/.
VALUES (@inserted2.grp_id, @inserted2.contact_id)
对于数据示例,在第一个表中插入后,我将获得以下记录,在辅助表1中,我将获得以下记录:
**Table t_usr_contact:**
175 - Firma - Temporary_value
176 - Firma - Temporary_value
**Table @inserted1:**
175
176
**Table t_usr_group:**
201 - Supplier_contact
202 - Supplier_contact
**Table @inserted2:**
201
202
**Table t_usr_contact_group:**
201 - 175
202 - 176
我不知道你最终想做什么,但是如果你想让两个表各有N行,从两个输入表的列组成一个表,就像你在你的例子中得到的(其中你的表175,176和你的表201,202将成为175|201,176|202表),那么你需要连接它们。要加入他们,你需要一把钥匙。你没有钥匙,所以你得装一把:
INSERT INTO thirdtable
SELECT contact_id,grp_id
FROM
(SELECT *, ROW_NUMBER() OVER(ORDER BY contact_id) as FakeKey FROM @inserted1) x
INNER JOIN
(SELECT *, ROW_NUMBER() OVER(ORDER BY grp_id) as FakeKey FROM @inserted2) x
ON x.FakeKey = y.FakeKey
当然,这会根据分配id的顺序以一种非常随意的方式连接数据。如果您想要一些特定的顺序,例如联系人175首先存在并且必须获得组202,那么您可以根据输入175将175和202一起输出到一个(临时)公共表中,然后将其拆分为
后面的详细表和中间人表,从而进行插入组(例如202)的查询。