【问题标题】:Insert values in table only one column changes value在表中插入值只有一列更改值
【发布时间】:2014-08-08 21:21:39
【问题描述】:

我有一个有 2 列的表格,

GROUP    PROJECTS
10001       1
10001       2

第一列 (GROUP) 保持相同的值 10001。 第二列(PROJECTS)更改值 3、5、9、100 等(我有 400 个项目 ID)

如何更正(循环?)语句以插入所有 400 个项目。 我对较小的列表使用了插入值。

INSERT INTO table (GROUP_ID, PROJECTS) VALUES (10001, 1, 10001, 2, 10001, etc, 10001, etc);

我在 Excel 中有列表(如果需要,我可以创建一个包含所有 400 个项目 ID 的临时表)

谢谢。

【问题讨论】:

  • what 的正确说法是什么?
  • 你需要澄清问题
  • 对不起,我的英语不太好。语句是如何插入400条group_ID相同的记录?

标签: sql plsql oracle11g


【解决方案1】:

我通常写这样的插入:

INSERT INTO table(GROUP_ID, PROJECTS)
    select 10001, 1 from dual union all
    select 10001, 2 from dual union all
    . . . ;

您应该能够在 Excel 中轻松生成 select 语句。

【讨论】:

  • 有时就这么简单。我将在 Excel 中生成插入语句。谢谢。
【解决方案2】:

如果项目 ID 存在于它们自己的表中(或者您可以从 Excel 数据创建一个),那么 yu 可以从那里获取值列表并交叉加入具有所有组 ID 的值:

insert into group_projects (group_id, project_id)
select g.group_id, p.project_id
from groups g
cross join projects p
where not exists (
  select 1 from group_projects gp 
  where gp.group_id = g.group_id and gp.project_id = p.project_id
);

where not exists() 排除所有现有对,因此您不会插入重复项。

SQL Fiddle

如果组没有自己的表,那么您可以使用子查询中的现有值:

insert into group_projects (group_id, project_id)
select g.group_id, p.project_id
from (select distinct group_id from group_projects) g
cross join projects p
where not exists (
  select 1 from group_projects gp 
  where gp.group_id = g.group_id and gp.project_id = p.project_id
);

如果您不想为它们创建表,也可以使用 Gordon 的方法将项目 ID 列表生成为子查询。

【讨论】:

  • 感谢所有帮助,两者都是很好的解决方案!
【解决方案3】:

我会采用我认为更简单且更具可读性的解决方案...使用 Excel 中的数据创建临时表,然后运行它-

DECLARE
CURSOR c1
IS
SELECT project_id
 FROM temp_table
WHERE project_id IS NOT NULL;
BEGIN
FOR rec in c1
LOOP
  INSERT INTO table
  VALUES (10001, rec.project_id);
 COMMIT;
END LOOP;
END;

似乎比一个巨大的插入语句或具有连接和子查询的复杂语句更干净。如果您想确保“表”中不存在该值,请将该条件添加到游标选择语句中,或者如果您对表有约束,请在循环中添加异常处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2015-07-22
    • 2021-12-20
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多