![](/img/trans.png)
[英]How to insert data from source table (but different columns) into two different tables in SQL Server
[英]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_ID
和NAME_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.