【问题标题】:Select data from three tables where show all records in first table row wise and all duplicates of the other horizontally从三个表中选择数据,其中显示第一个表行中的所有记录并水平显示另一个表的所有重复项
【发布时间】:2018-05-03 15:15:41
【问题描述】:

我有三个表 Employee、Department 和一个打破 Employee 和 Department 之间多对多关系的表。如果我想让所有员工各自的部门,员工出现重复,所以我想显示所有员工的部门,但水平显示部门以删除重复。

CREATE TABLE `tbl_emp` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `title` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
);

CREATE TABLE `tbl_dept` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
);

CREATE TABLE `tbl_emp_dept` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `dep_id` bigint(20) NOT NULL DEFAULT '0',
    `emp_id` bigint(20) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
);

【问题讨论】:

    标签: mysql


    【解决方案1】:

    尝试使用GROUP_CONCAT

    SELECT
        e.id,
        e.title,
        GROUP_CONCAT(d.name) AS departments
    FROM tbl_emp e
    LEFT JOIN tbl_emp_dept ed
        ON e.id = ed.emp_id
    LEFT JOIN tbl_dept d
        ON ed.dep_id = d.id
    GROUP BY
        e.id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2021-07-08
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      相关资源
      最近更新 更多