【问题标题】:SQL-Duplicated rows Sql QuerySQL-重复行 Sql 查询
【发布时间】:2015-04-05 03:01:24
【问题描述】:

我的这个 SQL 语句有问题,它打印的结果带有重复的行,这很烦人,这是我的 SQL 语句:

SELECT
week_day,
exam_date ,
s.name ,
l.lgna_name
,f.first_name
FROM
fci_exam_time_table_line,
fci_subject s ,
fci_staff f,
lgna_lgna l 
WHERE
exam_id =%d 
GROUP BY
week_day,
exam_date ,
s.name ,
l.lgna_name ,
f.first_name
ORDER BY
exam_date 

它的打印如下所示

week_day|  exam_date |name|lgna_name|first_name

"monday";"2015-04-13";"12";   "12"  ;"12"
"monday";"2015-04-13";"12";   "12"  ;"323"
"monday";"2015-04-13";"12";   "232" ;"12"
"monday";"2015-04-13";"12";   "232" ;"323"
"monday";"2015-04-14";"12";   "12"  ;"12"
"monday";"2015-04-14";"12";   "12"  ;"323"
"monday";"2015-04-14";"12";   "232" ;"12"
"monday";"2015-04-14";"12";   "232" ;"323"

我希望它像这样打印:

week_day|  exam_date |name|lgna_name|first_name

"monday";"2015-04-13";"12";   "12"  ;"12,323"
"monday";"2015-04-13";"12";   "232";"12,323"
"monday";"2015-04-14";"12";   "12"  ;"12,323"
"monday";"2015-04-14";"12";   "232" ;"12,323"

【问题讨论】:

  • 尝试加入一些连接条件。
  • 你能告诉我怎么做吗?
  • GROUP BY exam_dateGROUP_CONCAT(first_name)
  • 很好..你能告诉我postgersql中的等价物吗??
  • 我在两台机器上运行的(mysql 和 postgres)都有相同的数据库

标签: mysql sql database postgresql


【解决方案1】:

使用Group_Concat函数并从Group by中删除f.first_name

SELECT week_day, 
       exam_date, 
       s.name, 
       l.lgna_name, 
       Group_conact(f.first_name, ',') 
FROM   fci_exam_time_table_line, 
       fci_subject s, 
       fci_staff f, 
       lgna_lgna l 
WHERE  exam_id =% d 
GROUP  BY week_day, 
          exam_date, 
          s.name, 
          l.lgna_name 
ORDER  BY exam_date 

对于Postgres,请使用array_to_stringarray_agg。解释检查here

select ...
       array_to_string(array_agg(f.first_name), ',')
FROM   fci_exam_time_table_line, 
       fci_subject s, 
       fci_staff f, 
       lgna_lgna l 
WHERE  exam_id =% d 
GROUP  BY week_day, 
          exam_date, 
          s.name, 
          l.lgna_name 
ORDER  BY exam_date 

【讨论】:

  • 你能在 postgersql 中发布等价的吗?
  • 这只是在这个从根本上破坏了查询的猪身上涂了口红。表格需要正确连接。交叉连接四个表是非常昂贵的废话。
  • @ErwinBrandstetter - 根据样本数据显然这是解决方案
  • @Fireblade:这是一个非常糟糕且具有潜在危险的示例。没有人应该使用它。如果每个表的行数多于几行,则四个表的交叉连接可能会使您的服务器停止运行。只需添加加入条件。该问题缺少修复查询的基本信息。
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多