Sql 为父表的每条记录在子表中插入新的顺序记录
我在SQL server上有两个表: t1 (parent) =========== id 1 2 是否可以在一个SQL语句中为每个父id向t2插入新记录,因此结果将是: t2: ======================= parent_id record_number 1 1 1 2 2 1 2 2 2 3 谢谢大家! 这就是你想要的吗Sql 为父表的每条记录在子表中插入新的顺序记录,sql,sql-server,Sql,Sql Server,我在SQL server上有两个表: t1 (parent) =========== id 1 2 是否可以在一个SQL语句中为每个父id向t2插入新记录,因此结果将是: t2: ======================= parent_id record_number 1 1 1 2 2 1 2 2 2 3 谢谢大家! 这就是你想要的吗 insert into t2 (parent_id, record_num
insert into t2 (parent_id, record_number)
select id, id
from t1;
如果是这样,我更喜欢使用NULL来表示某个东西没有父对象:
insert into t2 (parent_id, record_number)
select null, id
from t1;
这是数据的更精确表示。有些东西不是它自己的父母。我认为OP的目标是:
INSERT INTO T2
SELECT T1.id
MAX(T2.ID) + 1
FROM T1
JOIN T2 ON T1.ID = T2.parent_id
GROUP BY T1.id;
像这样的东西应该会得到你想要的 注意,我添加了一个左连接,以便在父记录还不在t2中时可以使用ISNULL
INSERT INTO t2 (parent_id, record_number)
SELECT
A.id,
ISNULL(MAX(B.record_number), 0) + 1
FROM t1 A
LEFT JOIN t2 B
ON A.id = B.parent_id
GROUP BY
A.id
另外,使用ROW_number函数可以有效地生成记录编号。这里有一个例子。也许您有特定的原因需要将其持久化到表中,但如果没有,这也可以用于动态计算
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY parent_id ORDER BY id)
FROM t2
ORDER BY parent_id, record_number
请注意,它假设您在t2中有一个id列,或者其他一些东西来排序记录,1,2和2,3来自哪里?@SalmanA这将是每个父id的下一个顺序记录编号。亲爱的Eilert Hjelmeseth,这正是我需要的,谢谢!谢谢大家回答我的问题@cadol_StOv,乐于帮助,欢迎使用Stack Overflow!如果此答案或任何其他答案解决了您的问题,请单击绿色复选标记将其标记为已接受。
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY parent_id ORDER BY id)
FROM t2
ORDER BY parent_id, record_number