![](/img/trans.png)
[英]How do I select rows from one table as CSV and insert into another table based on a key?
[英]How do I insert data from one table to another when there is unequal number of rows in one another?
我有一個名為People
的表,該表有19370行,其中playerID
是主列。 還有另一個名為Batting
表,該表具有playerID
作為外鍵,並且具有104324行。
有人告訴我在“ People
表中添加一個名為Total_HR
的新列,該列包含在“ Batting
表中。 因此,我必須將“ Batting
表中的列數據插入“ People
表中。
但是,我得到了錯誤:
消息515,級別16,狀態2,行183無法將值NULL插入表'Spring_2019_BaseBall.dbo.People'的列'playerID'中; 列不允許為空。 INSERT失敗。 該語句已終止。
我已經嘗試過UPDATE
和INSERT INTO SELECT
,但是遇到了同樣的錯誤
insert into People (Total_HR)
select sum(HR) from Batting group by playerID
我希望輸出使用“ Batting
表中的“ HR
列填充“ People
表中的“ Total_HR
”列。
您可以使用聯接
BEGIN TRAN
Update People
Set Total_HR = B.HR_SUM
from PEOPLE A
left outer join
(Select playerID, sum(HR) HR_SUM
from Batting
group by playerID) B on A.playerID = B.playerID
Select * from People
ROLLBACK
請注意,我已將此代碼放在事務塊中,因此您可以在提交之前測試更改
從錯誤消息中,似乎playerID是表People中的必填字段。 您需要在INSERT INTO子句中指定表People的所有必填字段,並在SELECT子句中提供相應的值。
我在下面添加了字段playerID,但您可能還需要添加其他必填字段。
insert into People (playerID, Total_HR)
select playerID, sum(HR) from Batting group by playerID
但是,很奇怪,您想在應該已經存在的表中插入行。 否則,您可能在表Batting中的字段playerID上沒有有效的外鍵...如果嘗試將表Batting中的此類行插入表People中,則可能會遇到另一個錯誤(違反PRIMARY KEY約束)...除非。 ..您正在創建數據庫,並且想要在將實際外鍵約束添加到表People之前,從填充/導入的表Batting中填充空表People。 對不起,我不會質疑你的意圖。 我個人將考慮對查詢進行某種程度的更新,以便它不會嘗試插入表People中已經存在的任何行:
insert into People (playerID, Total_HR)
select Batting.playerID, sum(Batting.HR)
from Batting
left join People on People.playerID = Batting.playerID
where People.playerID is null and Batting.playerID is not null
group by playerID
您需要計算SUM
,然后將此結果連接到People
表,以將People
Total_HR
列和Batting
計算的相應SUM放入同一行。
這是一種編寫方法。 我使用CTE使其更具可讀性。
WITH
CTE_Sum
AS
(
SELECT
Batting.playerID
,SUM(Batting.HR) AS TotalHR_Src
FROM
Batting
GROUP BY
Batting.playerID
)
,CTE_Update
AS
(
SELECT
People.playerID
,People.Total_HR
,CTE_Sum.TotalHR_Src
FROM
CTE_Sum
INNER JOIN People ON People.playerID = CTE_Sum.playerID
)
UPDATE CTE_Update
SET
Total_HR = TotalHR_Src
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.