Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为父表的每条记录在子表中插入新的顺序记录_Sql_Sql Server - Fatal编程技术网

Sql 为父表的每条记录在子表中插入新的顺序记录

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

我在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_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