【发布时间】:2012-03-30 06:53:14
【问题描述】:
我正在尝试从表中检索数据并将多行合并为一列,而不重复任何信息。
我有以下表格:简介、资格、项目。
简介 pro_id 姓 名 ------ -------- ---------- 1 约翰·詹姆斯 2 弗雷德国王 3 豪华游艇 Raymond 资质 pro_id 学位学年 ------ ------ ------ ----- 1 MBA 沃顿大学 2002 1 法学学士耶鲁大学 2001 2 理学士卡文顿大学 1998 2 BEd 凯洛格大学 1995 项目 pro_id 职称年份 ------ ------ ------ 1 社交网络 2003 1 水生垃圾挖掘 2007 2 太阳能收音机的设计 1992 2 专家系统的发展 2011
我想检索每个人的所有信息,每个人在结果中只出现一次。关于资格和项目的信息应该在各自的列中(一列用于资格,另一列用于项目),以逗号分隔。例如,上述样本数据的结果应该是:
1 约翰詹姆斯 MBA 沃顿大学 2002 年,法学学士耶鲁大学 2001 年社交网络 2003 年,水生碎片挖掘 2007 年,太阳能电池板设计 2008 年 2 King Fred BSc Covington University 1998, BEd Kellog University 1995, Msc MIT 2011 Design of solar radios 1992, Development of expert systems 2011 3 雷蒙德豪华游艇目前,我有一个查询:
SELECT pro_id,
surname,
firstname,
group_concat(degree,school,year) AS qual,
concat(Title,year) AS work
FROM profile,
LEFT JOIN qualification
ON qualification.pro_id = profile.pro_id
JOIN projects
ON projects.pro_id = profile.pro_id
GROUP BY pro_id
对于示例数据,此查询结果为:
1 John James MBA 沃顿大学 2002 年,社交网络 2003 年 1 John James LLB 耶鲁大学 2001 年,水生碎片挖掘 2007 年 1 约翰·詹姆斯 MBA 沃顿大学 2002 年,社交网络 2003 年,水生碎片挖掘 2007 年 ETC注意:Raymond Luxury-Yachts 不在当前结果中。
我不想要重复的结果记录。此外,如果姓氏在资格和项目表中没有任何条目,我希望查询返回姓名并在资格和项目表中显示一个空字段,而不是完全省略它们。
【问题讨论】:
-
正确的sample code(此处为 SQL 语句)比任何即席模式和示例数据格式都更有用。样品请使用
CREATE TABLE和INSERT ... VALUES。所需的结果不需要以示例代码的形式呈现,因为结果是代码的输出,而不是代码本身。此外,四个空格的缩进是将行标记为代码,而不是用于任意预先格式化的文本。对于后者,您可以使用<pre>。