![](/img/trans.png)
[英]How can I select multiple rows with the count of other rows in the same table that has their primary keys in a separate column?
[英]How do I select insert into select a table which already has values in the primary key column without adding new rows?
我正在为我的学校项目创建数据库,在该数据库中,我必须通过标准化提供给我们的示例表来生成功能数据库。 我遇到麻烦的一张桌子是行程。 我根据规范化生成了3个表,分别是“目的地”,“行程”和“ Itinerary_Destinations”。
目的地的代码是:
create table Destinations
(
DestinationID varchar(5) primary key,
Name varchar(45)
);
行程的代码是:
create table Itineraries
(
ItineraryID varchar(5),
Name varchar(45)
);
最后一张表的代码是:
create table Itinerary_Destinations
(
DI varchar(5) primary key,
ItineraryID varchar(5) foreign key references Itineraries(ItineraryID),
Itinerary_Name varchar(45),
DestinationID varchar(5) foreign key references Destinations(DestinationID),
Destination_Name varchar(45)
);
除“ Destination_Name”和“ Itinerary_Name”列外,数据已插入所有3个表中。 我尝试使用的代码返回为错误。 代码如下所示。
insert into Itinerary_Destinations (Itinerary_name)
select Name from Itineraries where
Itineraries.ItineraryID = ItineraryID;
它返回的错误是
消息515,级别16,状态2,第1行无法将值NULL插入表“ DDDAssignment.dbo.Itinerary_Destinations”的“ DI”列中; 列不允许为空。 INSERT失败。 该语句已终止。
有没有一种方法可以完成插入Destination_Name和Itinerary_Name的任务,而无需创建需要主键的新记录?
还是应该手动执行?
如果要修改已经存在的记录,则应使用UPDATE
而不是INSERT
:
UPDATE a
SET Itinerary_name = b.Name
FROM Itinerary_Destinations a
INNER JOIN Itinerary_name b
ON a.ItineraryID = b.ItineraryID;
但是,如果确实有一些数据尚未与Itinerary_Destinations
表进行逻辑关联,则使用插入是合适的。
在null的情况下使用coalesce
功能将插入空白字符串,因为您的列不允许使用null值,这就是为什么在查询中出现该错误的原因
insert into Itinerary_Destinations (Itinerary_name)
select coalesce(Name,' ') from Itineraries where
Itineraries.ItineraryID = ItineraryID;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.