【问题标题】:Repeated column on inner join select query内部连接选择查询中的重复列
【发布时间】:2021-06-13 16:23:37
【问题描述】:

我这里有个小问题我有两个表,主键和外键

像这样:带有主键的表 1

Id   PK
novelname
description
Date

表 2 带有外键

Id   auto increment
Chaptername 
Chapternumber
Content 
Chapter_id  FK

我使用连接查询:

SELECT table1.*, table2.*
FROM Table1
INNER JOIN table2 ON Table1.id = table2.chapter_id 
WHERE Table1.id = 0 
  AND Table2.chapter_id = 0

在表 1 中有一个小说名,但在表 2 中有多个章节,并且小说名称与每个章节名称重复 如何删除重复的小说名称并仅显示一个具有多个章节名称的小说名称

页面中的输出是这样的

我在同一部小说中有 3 个章节,它的显示方式是这样的

novelname
Chapter 1

novelname
Chapter 2

novelname 
Chapter 3

预期的输出是:

Novelname 

Chapter 1
Chapter 2
Chapter 3

【问题讨论】:

  • 欢迎来到 SO!如果您编辑您的问题以包含示例数据(并将其布置为表格)以及您的预期输出以及错误输出,这将有很大帮助。
  • 这取决于你想要什么结果,minimal reproducible example 对这些事情很有帮助
  • 我还删除了冲突的标签;只标记您真正使用的RDBMS。
  • @Larnu,问题与使用* 无关。问题是 OP 想要做一些查询不打算做的事情。要么构建一个报告并将其设计为不重复小说名称(章节仍将是垂直的),要么将章节连接成一个字符串。后者如何完成取决于所使用的数据库以及 GUI 界面。
  • 请提及您的 dbms 及其版本。

标签: sql


【解决方案1】:

如果您使用的是 sql server 2017 或更新版本,则可以使用 string_agg() 将章节名称作为逗号分隔的字符串获取到每本小说的列中。

SELECT   table1.novelname , string_agg(table2.Chaptername,',') FROM  Table1 INNER JOIN  table2 ON Table1.id = table2.chapter_id  WHERE Table1.id = 0  
group by table1.novelname 

对于 MySQL,它将是:

 SELECT   table1.novelname , group_concat(table2.Chaptername,',') FROM  Table1 INNER JOIN  table2 ON Table1.id = table2.chapter_id  WHERE Table1.id = 0  
    group by table1.novelname 

【讨论】:

  • 你能用这个语句显示结果吗
  • 不,选择查询没有任何其他建议
  • 对于 MySQL 它是 group_concat()
猜你喜欢
  • 2018-02-27
  • 1970-01-01
  • 2019-08-21
  • 2013-12-16
  • 2023-03-24
  • 2015-01-09
  • 2011-06-16
  • 1970-01-01
  • 2011-11-12
相关资源
最近更新 更多