首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入主题的重复行

插入主题的重复行
EN

Stack Overflow用户
提问于 2021-10-13 17:43:01
回答 2查看 38关注 0票数 0

是否在不改变现有表的情况下在查询中插入重复行(除了需要三行的外文之外,所有主题都有两行)。

代码语言:javascript
复制
select * from school_data

student_name            subjects                class_date
  Joe                    Math                    10/1/2021
  Mike                  Science                  10/2/2021
  Eddie                 History                  10/3/2021
  Steve                 English                  10/4/2021
  John                 Foreign Language          10/5/2021

请求:

代码语言:javascript
复制
student_name            subjects                class_date
  Joe                    Math                    10/1/2021
  Joe                    Math                    10/1/2021
  Mike                  Science                  10/2/2021
  Mike                  Science                  10/2/2021
  Eddie                 History                  10/3/2021
  Eddie                 History                  10/3/2021
  Steve                 English                  10/4/2021
  Steve                 English                  10/4/2021
  John                 Foreign Language          10/5/2021
  John                 Foreign Language          10/5/2021
  John                 Foreign Language          10/5/2021
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-13 18:10:07

使用包含3行的生成表连接

代码语言:javascript
复制
select * 
from school_data
join generate_series(1,3) t(n) on t.n<=2 or subjects ='Foreign Language'
order by student_name
票数 1
EN

Stack Overflow用户

发布于 2021-10-13 18:03:56

那么,您可以创建另一个名为“subject”的表,并尽可能多地输入主题名称(比如两个用于数学,三个用于外语)。这将在加入它时产生一对多的结果。只需要确保你把所有的科目都放在里面。

主题表目录:

代码语言:javascript
复制
Math
Math 
Science 
Science 
Foreign Language
Foreign Language
Foreign Language

然后,查询可能如下所示:

代码语言:javascript
复制
    select sc.student_name, sc.subject_name, sc.class_date
    from student_classes sc
    join subjects s
      on s.subject_name = sc.subject_name
    order by 1

Db-小提琴在这里找到:https://www.db-fiddle.com/f/bYxyZidB2cPPBj3w8Pxj9H/0

编辑:如果您不能创建一个表,那么您可以使用CTE。我相信有更好的解决方案,但这是可行的。

代码语言:javascript
复制
    with subjects as
        (
        select 'Math' as subject_name
        union all
        select 'Math' as subject_name
        union all
        select 'Science' as subject_name
        union all
        select 'Science' as subject_name
        union all
        select 'Foreign Language' as subject_name
        union all
        select 'Foreign Language' as subject_name
        union all 
        select 'Foreign Language' as subject_name
        )
    select sc.student_name, sc.subject_name, sc.class_date
    from student_classes sc
    join subjects s
      on s.subject_name = sc.subject_name
    order by 1

Db-小提琴在这里找到:https://www.db-fiddle.com/f/o4vxshi9ua3rLCNdT9oXAR/0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69560031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档