连续显示多个记录

时间:2017-12-25 03:34:49

标签: mysql sql

假设我创建了2个表。一个是学生,另一个是事件。表格结构和记录就像它们一样。我想用逗号分隔显示事件结果。

--
-- Table structure for table `events`
--

CREATE TABLE `events` (
  `id` int(11) NOT NULL,
  `event_name` varchar(100) NOT NULL,
  `event_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `events`
--

INSERT INTO `events` (`id`, `event_name`, `event_id`) VALUES
(1, 'dance', 1),
(2, 'sing', 2),
(3, 'acting', 3),
(4, 'debate', 4);

-- --------------------------------------------------------

--
-- Table structure for table `students`
--

CREATE TABLE `students` (
  `id` int(100) NOT NULL,
  `student_name` text NOT NULL,
  `event_id` int(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `students`
--

INSERT INTO `students` (`id`, `student_name`, `event_id`) VALUES
(1, 'student 1', 1),
(2, 'student1', 2),
(3, 'student1', 3),
(4, 'student1', 4),
(5, 'student2', 3);
(6, 'student3', 2);
(7, 'student3', 4);

我希望看到像这样的结果

Students  |  Events
----------|---------
Student1  | dance, sing, acting, debate
Student2  | acting
Student3  | sing, debate

SQL查询是什么?

由于

1 个答案:

答案 0 :(得分:4)

只需进行组连接以及两个表之间的连接:

students

screen capture of query output from demo link

Demo

请注意,您的表架构似乎未完全规范化。通常,处理此问题的方法是为学生提供单个表信息,为事件提供单个表,然后为学生连接事件的联结表。您的students表似乎同时作为联结表和包含唯一学生信息的表格。

因此,更好的方法是重构(1, 'student1'), (2, 'student2'), (3, 'student3'); 以包含此内容:

student_event

并创建一个新的联结表(id, student_id, event_id) (1, 1, 1), (2, 1, 2), (3, 1, 3), (4, 1, 4), (5, 2, 3), (6, 3, 2), (7, 3, 4); 以包含学生和事件之间的关系:

TestFunction