You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需新建表,如何在LEGO的Sets表添加聚合生成的num_diff_parts列

解决方案

1. 给Sets表新增统计列

先执行SQL语句添加num_diff_parts列,用于存储每个套装的独特零件数量:

ALTER TABLE Sets ADD COLUMN num_diff_parts INT DEFAULT 0;

2. 用零件统计结果更新列

通过子查询关联的方式,把每个套装的零件统计结果更新到新增列中,这种方式避免了GROUP BY多字段的潜在风险,逻辑更清晰:

UPDATE Sets s
JOIN (
    -- 直接从Parts表按套装分组统计零件数,外键关联保证set_number对应有效套装
    SELECT set_number, COUNT(*) AS num_diff_parts
    FROM Parts
    GROUP BY set_number
) p ON s.set_number = p.set_number
SET s.num_diff_parts = p.num_diff_parts;

3. 实现数据自动同步(可选)

如果后续Parts表的零件有新增或删除,手动更新列效率低,可以用触发器实现自动同步:

MySQL触发器示例

  • 新增零件时自动增加计数:
DELIMITER //
CREATE TRIGGER update_parts_count_after_insert
AFTER INSERT ON Parts
FOR EACH ROW
BEGIN
    UPDATE Sets
    SET num_diff_parts = num_diff_parts + 1
    WHERE set_number = NEW.set_number;
END //
DELIMITER ;
  • 删除零件时自动减少计数:
DELIMITER //
CREATE TRIGGER update_parts_count_after_delete
AFTER DELETE ON Parts
FOR EACH ROW
BEGIN
    UPDATE Sets
    SET num_diff_parts = num_diff_parts - 1
    WHERE set_number = OLD.set_number;
END //
DELIMITER ;

用生成列自动计算(部分数据库支持)

如果你的数据库支持生成列(如PostgreSQL、SQL Server),可以直接创建自动计算的列,无需手动更新或编写触发器:

  • PostgreSQL:
ALTER TABLE Sets ADD COLUMN num_diff_parts INT GENERATED ALWAYS AS (
    (SELECT COUNT(*) FROM Parts p WHERE p.set_number = Sets.set_number)
) STORED;
  • SQL Server:
ALTER TABLE Sets ADD num_diff_parts AS (
    (SELECT COUNT(*) FROM Parts p WHERE p.set_number = Sets.set_number)
);

生成列会自动根据Parts表的实时数据更新,无需额外维护。


内容的提问来源于stack exchange,提问作者kd8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:35:56