如何将具有多个结果的子查询插入多行?
How do I insert a subquery with multiple results into multiple rows?
我想将查询结果添加到 table。有多个值,被插入到当前为 NULLS 的多行中。
我有以下 tables:
CREATE TABLE CAR (
CarID INT NOT NULL PRIMARY KEY,
Make VARCHAR (30) NOT NULL,
Model VARCHAR (30) NOT NULL,
Type VARCHAR (30) NOT NULL,
YearModel INT NOT NULL,
Price VARCHAR (100) NOT NULL,
);
CREATE TABLE [TRANSACTION] (
tID INT NOT NULL PRIMARY KEY,
cID INT NOT NULL FOREIGN KEY REFERENCES CUSTOMER(CID),
CarID INT NOT NULL FOREIGN KEY REFERENCES CAR(CARID),
eID INT NOT NULL FOREIGN KEY REFERENCES EMPLOYEE(EID),
tDate DATE,
PickupDate DATE NOT NULL,
ReturnDate DATE NOT NULL
);
然后我不得不添加一个新列:
ALTER TABLE [TRANSACTION]
ADD Amount_Due int;
下面的代码给出了我需要的结果:
SELECT Price*DATEDIFF(DAY,PickupDate, ReturnDate)
FROM [TRANSACTION], CAR
WHERE [TRANSACTION].CarID = CAR.CarID
但我不知道如何将所有数据插入我的 Amount_Due 列。
我尝试使用 INSERT INTO,但它告诉我 Amount_Due 附近有语法错误。
INSERT INTO [TRANSACTION] Amount_Due
SELECT Price*DATEDIFF(DAY,PickupDate, ReturnDate)
FROM CAR, [TRANSACTION]
WHERE CAR.CarID = [TRANSACTION].CarID
我玩过 INSERT INTO 和 UPDATE,但我无法理解我做错了什么,或者我遗漏了什么。
我正在使用 SQL 短信 2018
感谢您的帮助。
您没有插入数据您正在更新现有行,因此您需要update
:
update t set
t.Amount_Due = c.Price * DateDiff(day, c.PickupDate, c.ReturnDate)
from [transaction] t
join car c on c.carId=t.carId
备注
- 始终使用正确的
join
语法,避免添加 table 分隔
逗号.
- 也总是别名你的table用有意义的短
可读性的别名。
- 避免对对象使用保留字,例如
transaction
- 如果你的 table 包含超过 1 行然后调用它
transactions
并避免总是必须使用 []
来避免的需要
歧义。
- SSMS 不是 SQL 服务器,SSMS 只是一个用于访问SQL 服务器的应用程序。如果您需要知道您的 SQL 服务器版本,请使用
select @@version
。
我想将查询结果添加到 table。有多个值,被插入到当前为 NULLS 的多行中。
我有以下 tables:
CREATE TABLE CAR (
CarID INT NOT NULL PRIMARY KEY,
Make VARCHAR (30) NOT NULL,
Model VARCHAR (30) NOT NULL,
Type VARCHAR (30) NOT NULL,
YearModel INT NOT NULL,
Price VARCHAR (100) NOT NULL,
);
CREATE TABLE [TRANSACTION] (
tID INT NOT NULL PRIMARY KEY,
cID INT NOT NULL FOREIGN KEY REFERENCES CUSTOMER(CID),
CarID INT NOT NULL FOREIGN KEY REFERENCES CAR(CARID),
eID INT NOT NULL FOREIGN KEY REFERENCES EMPLOYEE(EID),
tDate DATE,
PickupDate DATE NOT NULL,
ReturnDate DATE NOT NULL
);
然后我不得不添加一个新列:
ALTER TABLE [TRANSACTION]
ADD Amount_Due int;
下面的代码给出了我需要的结果:
SELECT Price*DATEDIFF(DAY,PickupDate, ReturnDate)
FROM [TRANSACTION], CAR
WHERE [TRANSACTION].CarID = CAR.CarID
但我不知道如何将所有数据插入我的 Amount_Due 列。
我尝试使用 INSERT INTO,但它告诉我 Amount_Due 附近有语法错误。
INSERT INTO [TRANSACTION] Amount_Due
SELECT Price*DATEDIFF(DAY,PickupDate, ReturnDate)
FROM CAR, [TRANSACTION]
WHERE CAR.CarID = [TRANSACTION].CarID
我玩过 INSERT INTO 和 UPDATE,但我无法理解我做错了什么,或者我遗漏了什么。
我正在使用 SQL 短信 2018
感谢您的帮助。
您没有插入数据您正在更新现有行,因此您需要update
:
update t set
t.Amount_Due = c.Price * DateDiff(day, c.PickupDate, c.ReturnDate)
from [transaction] t
join car c on c.carId=t.carId
备注
- 始终使用正确的
join
语法,避免添加 table 分隔 逗号. - 也总是别名你的table用有意义的短 可读性的别名。
- 避免对对象使用保留字,例如
transaction
- 如果你的 table 包含超过 1 行然后调用它transactions
并避免总是必须使用[]
来避免的需要 歧义。 - SSMS 不是 SQL 服务器,SSMS 只是一个用于访问SQL 服务器的应用程序。如果您需要知道您的 SQL 服务器版本,请使用
select @@version
。