【问题标题】:Is it possible to insert data into table using two select statements in one query?是否可以在一个查询中使用两个 select 语句将数据插入表中?
【发布时间】:2013-12-11 18:32:51
【问题描述】:

我正在使用具有 3 个表的数据库,其中一个是 skill 表,另一个是 experience,第三个是 Experience_skill 此表中的表我有外键现在问题是两个外键也是主键。假设我将数据存储到技能表以及经验表中,如何在Experience_skill 表中插入两个键数据。我尝试了以下查询。

insert into Experience_skill(eid, Skill_Id)
select eid 
from Experience 
where eid=2 
union
select Skill_Id 
from Skills 
where Skill_Id=2

我得到的错误:

INSERT 语句的选择列表包含的项目少于插入列表。 SELECT 值的数量必须与 INSERT 列的数量相匹配。 比我试过这个。

insert into Experience_skill(eid)select eid from Experience where eid=2

它给了我这个错误:

无法将值 NULL 插入到列“Skill_Id”、表“resume.dbo.Experience_skill”中;列不允许空值。插入失败。 请帮帮我 这是表的快照第一个快照是技能表

第二个是经验表

这个是EXperience_skill 表,我有我的外键

【问题讨论】:

  • 请为您的表提供 DDL。
  • 我不认为 union 是你在这里寻找的。您需要在选择中指定与插入中一样多的列
  • 在插入中您说您将提供 eid 和 Skill_Id.. 但是您的选择仅提供其中之一。
  • 我不知道我第一次遇到这种问题
  • 另外,您正在尝试插入 eid 和 Skill_id,但您在 where 子句中同时提供了它们......换句话说......你已经有了你想要的东西。

标签: sql sql-server


【解决方案1】:

使用 INSERT INTO 时,您需要在 SELECT 的每一行中提供目标表中的所有列(不允许 NULL)。

【讨论】:

  • 你在说这个,插入 Experience_skill(eid, Skill_Id)select eid from Experience where eid=2 UNION select Skill_Id from Skills where Skill_Id=2
  • 我认为如果我创建两个表的视图并且应用上述查询,这将起作用
  • 不,那行不通。在您的示例中,每一行将只有 1 列,eid 或 Skill_id。您需要在同一行中有 eid AND Skill_id。
  • 哦,我明白了,所以在 select 语句中不可能有单行。所以没有办法知道我真的需要这个
  • 我们之所以都想看你的表结构,是为了确定这2个表之间是否存在某种关系。如果有,那么可以在单个查询中加入它们以生成您需要的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多