【问题标题】:Update previous records in MySQL when new records are inserted插入新记录时更新 MySQL 中的先前记录
【发布时间】:2021-12-21 00:20:12
【问题描述】:
CREATE TABLE patients(
    s_no INT AUTO_INCREMENT PRIMARY KEY,
    booking_code VARCHAR(64),
    patient_id INT(5),
    visit_count INT(5)
);

INSERT INTO patients (booking_code, patient_id, visit_count) VALUES
('AB103', 3,5),
('AB432', 4,2),
('AB987', 5,1),
('AB733', 6,3),
('AB111', 7,2),
('AB212', 8,4);

INSERT INTO patients (booking_code, patient_id, visit_count) VALUES
('AB734', 4,2),
('AB601', 6,3),
('AB445', 7,2),
('AB389', 8,4);

我想要的是,每次添加新的预订记录时,如果 patient_id 之前已经向我们预订过,那么他之前记录中的 visit_count 应该更新为插入新记录中的最新 visit_count。 请注意,这是一个分析数据库,为了便于分析和仪表板代码,对其进行了非规范化处理。

【问题讨论】:

  • 触发器无法解决 - 它无法更改表中除当前行之外的行。在其中的事务中使用存储过程和 2 个查询。
  • 您的表称为patient,但实际上它存储患者和预订之间的连接信息。因此,您不应将总预订量的信息存储在此表中,因为此数据是患者的属性,而不是患者与确定预订之间的链接。
  • 谢谢@Akina。我已从患者表中删除了 visit_count 列。现在我使用视图来查看相同的患者表,但在最后一列中使用新计算的 visit_count。这样我就不必担心更新此列的值了。

标签: mysql stored-procedures triggers sql-update


【解决方案1】:

我了解到获取更新的 visit_count 库的最佳方法是使用视图获取它。

''' 创建或替换视图患者信息作为选择预订代码,患者编号,(从患者中选择计数(*),患者编号 = p.患者编号)从患者 p 中选择访问计数; 从患者信息中选择 *; '''

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多