【问题标题】:Update a column based on two multiplied columns of different tables根据不同表的两个相乘列更新一列
【发布时间】:2021-09-04 07:06:51
【问题描述】:

我正在处理汽车租赁任务。

我坚持的部分是根据总成本更新TRANSACTIONS_TEST 表的Amount_Due

总费用的计算方法是将CAR_TEST 表中的Price 乘以TRANSACTIONS_TEST.PickupDateTRANSACTIONS_TEST.ReturnDate 之间的总天数。

我不确定如何正确连接两个表/列来计算。

这是表格:

CREATE TABLE CAR_TEST 
(
    carID int PRIMARY KEY,
    Make varchar(15) NOT NULL,
    Model varchar(15) NOT NULL,
    Type varchar(10) NOT NULL,
    Year char(4) NOT NULL,
    Price int NOT NULL,
);

CREATE TABLE TRANSACTIONS_TEST 
(
    tID int PRIMARY KEY,
    cID int REFERENCES CUSTOMER_TEST(cID),
    carID int REFERENCES CAR_TEST(carID),
    eID int REFERENCES EMPLOYEE_TEST(eID),
    tDate date NOT NULL,
    PickupDate date NOT NULL,
    ReturnDate date NOT NULL,
);

这是我试图做到这一点的困惑尝试:

SELECT * 
FROM TRANSACTIONS_TEST, CAR_TEST
WHERE CAR_TEST.carID = TRANSACTIONS_TEST.carID

UPDATE TRANSACTIONS_TEST
SET Amount_Due = (DATEDIFF(DAY, PickupDate, ReturnDate) * CAR_TEST.Price)

如果有人能指出正确的方向,将不胜感激。

【问题讨论】:

  • 请显示一些示例数据和所需的结果(格式文本)。
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(差不多 30 年前),不鼓励使用它
  • Year char(4) NOT NULL 不,重新开始。年份是一个 4 位数字。

标签: sql sql-server tsql join sql-update


【解决方案1】:

您需要在 UPDATE 语句中加入:

UPDATE tt
SET tt.Amount_Due = DATEDIFF(DAY, tt.PickupDate, tt.ReturnDate) * ct.Price
FROM TRANSACTIONS_TEST tt INNER JOIN CAR_TEST ct
ON ct.carID = tt.carID

【讨论】:

  • 您好,感谢您的评论。当在其他帖子上看到类似的问题时,我无法完全理解它。这真的帮助我理解了它是如何工作的。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 2015-11-05
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多