我有DB2表“organization
”,它包含组织数据,包括以下列
organization_id (PK), name, description
有些组织被删除,因此很多“organization_id
”(即行)不再存在,所以它不像1,2,3,4,5那样连续......但更像是1,2 ,5,7,11,12,21 ....
然后还有另一个表格“title
”以及其他一些数据,其中organization_id
表格中organization
为FK
。
现在我必须为所有组织插入一些数据,一些标题将在Web应用程序中显示给所有组织。 总共有大约3000条记录要添加。
如果我一个接一个地做,它会是这样的:
INSERT INTO title
(
name,
organization_id,
datetime_added,
added_by,
special_fl,
title_type_id
)
VALUES
(
'This is new title',
XXXX,
CURRENT TIMESTAMP,
1,
1,
1
);
其中XXXX表示“organization_id
”,我应该从表“organization
”获取,以便插入只对现有的organization_id执行。
因此,只有“organization_id
”正在更改与“organization_id
”表格中的“organization
”匹配。
最好的方法是什么? 我检查了几个类似的问题,但它们似乎都不等于此? SQL Server 2008 Insert with WHILE LOOP 虽然循环答案会对连续ID进行交互,但其他答案也会假定ID是自动增量的。
同样在这里: How to use a SQL for loop to insert rows into database?
对此不确定(因为问题本身并不十分清楚) Inserting a multiple records in a table with while loop
对此有何建议?我该怎么办?
答案 0 :(得分:1)
如果您真的想要在Title中为每个组织记录添加一行,并且完全相同的数据应该可以正常工作:
INSERT INTO title
(
name,
organization_id,
datetime_added,
added_by,
special_fl,
title_type_id
)
SELECT
'This is new title' as name,
o.organization_id,
CURRENT TIMESTAMP as datetime_added,
1 as added_by,
1 as special_fl,
1 as title_type_id
FROM
organizations o
;
你不应该在select中使用列别名,但我包含了可读性和良好的度量。 https://www.ibm.com/support/knowledgecenter/ssw_i5_54/sqlp/rbafymultrow.htm
并且如果您处理错误或其他任何事情,可以采取良好措施......如果该organization_id和title不存在,您也可以执行类似的操作,仅在标题中插入记录。
INSERT INTO title
(
name,
organization_id,
datetime_added,
added_by,
special_fl,
title_type_id
)
SELECT
'This is new title' as name,
o.organization_id,
CURRENT TIMESTAMP as datetime_added,
1 as added_by,
1 as special_fl,
1 as title_type_id
FROM
organizations o
LEFT JOIN Title t
ON o.organization_id = t.organization_id
AND t.name = 'This is new title'
WHERE
t.organization_id IS NULL
;