【问题标题】:How do I insert a subquery with multiple results into multiple rows?如何将具有多个结果的子查询插入多行?
【发布时间】:2021-06-22 06:54:55
【问题描述】:

我想将查询结果添加到表中。有多个值被插入到当前为 NULLS 的多行中。

我有以下表格:

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 SMS 2018

感谢您的帮助。

【问题讨论】:

  • 我建议您尽可能不要这样做。最好只保留一个信息来源并在需要时进行总结,而不是保留两份副本
  • 仅供参考 SSMS 不是数据库,SSMS 的版本通常不相关。你感兴趣的是来自select @@version的结果。

标签: sql sql-server tsql sql-insert


【解决方案1】:

您不是插入数据,而是更新现有行,因此您需要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 语法,避免添加由 逗号。
  • 也总是别名你的表有意义的短 可读性的别名。
  • 避免对对象使用保留字,例如 transaction - 如果您的表包含多于 1 行,则调用它 transactions 并避免需要始终使用 [] 来避免 模棱两可。
  • SSMS 不是 SQL Server,SSMS 只是一个用于访问 SQL Server 的应用程序。如果您需要知道自己的 SQL Server 版本,请使用 select @@version

【讨论】:

  • Stu - 你太棒了 - 谢谢你的注释和解释!连接对我来说仍然有点困惑 - 我还有很长的路要走:)
猜你喜欢
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多