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

如何不修改现有表通过查询insert duplicate rows 实现各科目指定重复行数输出

解决方案

可以通过交叉连接自定义行数的临时序列实现,无需修改原表,全查询逻辑即可完成需求:

通用SQL写法(兼容 MySQL 8.0+、PostgreSQL、SQL Server 等主流数据库)

SELECT t.*
FROM school_data t
-- 构造1-3的序列临时表
CROSS JOIN (
    SELECT 1 AS n UNION ALL
    SELECT 2 UNION ALL
    SELECT 3
) AS num_sequence
WHERE 
    CASE 
        WHEN t.subjects = 'Foreign Language' THEN num_sequence.n <= 3
        ELSE num_sequence.n <= 2
    END
-- 可选排序,保证相同科目数据连续展示
ORDER BY t.student_name, num_sequence.n;

实现逻辑

  • 先通过UNION ALL构造包含1、2、3三个值的临时序列表
  • 原表和序列表交叉连接后,每条原数据会先生成3条重复记录
  • 通过WHERE条件过滤:普通科目只保留前2条记录,外语科目保留全部3条,刚好符合要求

PostgreSQL 简化写法

如果使用PostgreSQL,可以用内置的generate_series函数进一步简化代码:

SELECT t.*
FROM school_data t
CROSS JOIN generate_series(1, CASE WHEN subjects = 'Foreign Language' THEN 3 ELSE 2 END)
ORDER BY t.student_name;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:03