繁体   English   中英

SQL如何将两个不同表中的数据插入到一个表中?

[英]SQL How to insert data from two different table into one table?

我目前正在努力将两个不同表中的数据放入另一个表中。 但是,我想将 NAMES 表和 DEAD 表中的数据插入到我的新 NAME 表中。 下面是我的代码和表格。 任何帮助都会很棒,谢谢。

CREATE TABLE NAMES (
NAME_ID varchar(9),
NAME varchar(35),
BIRTHYEAR varchar(4) );

死表:

CREATE TABLE DEAD( 
DEATH_ID INT NOT NULL PRIMARY KEY,
DEATHYEAR INTEGER);

我要插入数据的新名称:

CREATE TABLE NAME (
NAME_ID VARCHAR(60),
NAME  VARCHAR (40),
BIRTHYEAR int,
DEATH_ID int );

下面是我的插入代码,每次运行它时,我都会收到该错误;

Insert into NAME(NAME_ID,NAME, BIRTHYEAR, DEATH_ID )
Select NAME_ID ,NAME, BIRTHYEAR, (select DISTINCT DEATH_ID FROM DEAD)
from NAMES;

错误:

Error starting at line : 77 in command -
Insert into NAME(NAME_ID,NAME, BIRTHYEAR, DEATH_ID )
Select NAME_ID ,NAME, BIRTHYEAR, (select DISTINCT DEATH_ID FROM DEAD)
from NAMES
Error report -
SQLORA-01427: single-row subquery returns more than one row

您可以使用包含DISTINCT运算符的CROSS JOIN查询:

INSERT INTO NAME(NAME_ID,NAME, BIRTHYEAR, DEATH_ID )
SELECT DISTINCT N.NAME_ID , N.NAME, N.BIRTHYEAR, D.DEATH_ID
  FROM NAMES N
 CROSS JOIN DEAD D;

更新:如果您不需要插入任何提供DEATH_ID为空的行,并且可以通过DEATH_IDNAME_ID连接两个表,那么使用这样的OUTER JOIN

INSERT INTO NAME(NAME_ID,NAME, BIRTHYEAR, DEATH_ID )
SELECT DISTINCT N.NAME_ID , N.NAME, N.BIRTHYEAR, D.DEATH_ID
  FROM NAMES N
  LEFT JOIN DEAD D
    ON D.DEATH_ID = N.NAME_ID
 WHERE D.DEATH_ID IS NOT NULL

你的插入语句有误,需要返回一行。 目前您正在做两个单独的选择。 只需通过连接进行一个选择。

INSERT INTO NAME(NAME_ID,NAME, BIRTHYEAR, DEATH_ID )
SELECT n.NAME_ID, n.NAME, n. BIRTHYEAR, d.DEATH_ID 
FROM NAMES n 
LEFT JOIN DEAD d ON n.NAME_ID = d.DEATH_ID 

您可能想要创建一个WHERE子句.. 不确定您想如何添加DEATH_ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM