mysql - 使用 LEFT JOIN 后获取重复行

标签 mysql

我想将 3 个表连接到一个表中。但是当我这样做时,我得到了一些重复的列。

查询:

SELECT DISTINCT pl.projectNo, pl.proc_leader, pc.proc_checker, ps.proc_staff FROM proc_leader pl
LEFT JOIN proc_checker pc ON pl.projectNo=pc.projectNo
LEFT JOIN proc_staff ps ON pl.projectNo=ps.projectNo
WHERE pl.projectNO="17010002" ORDER BY pl.projectNo

我从查询中得到的是:

| projectNo | proc_leader | proc_checker | proc_staff | 
+-----------+-------------+--------------+------------+
| 170002    | BARIKAN     |    BENNY     |   BOBBY    |
| 170002    | BARIKAN     |    BENNY     |   CHRIS    |

所以问题是我只有一个 BARIKAN 和 BENNY,但它的名字重复。我需要的是连接表而不重复,如果没有名称它应该只是空白。

我想要的是:

| projectNo | proc_leader | proc_checker | proc_staff | 
+-----------+-------------+--------------+------------+
| 170002    | BARIKAN     |    BENNY     |   BOBBY    |
| 170002    |             |              |   CHRIS    |

proc_staff table:
| projectNo | process | proc_staff |
+-----------+---------+------------+
| 170002    | CGI MOD |   BOBBY    |
| 170002    | CGI MOD |   CHRIS    |

最佳答案

奇怪的请求,您的数据是表格形式的,但是......试试这个:

子查询检查同一项目上的实际人员元素之前是否不存在人员,您显示信息,而不是放入 NULL(或者如果您愿意,可以使用 '' 作为空字符串)

SELECT
    DISTINCT pl.projectNo, 
    CASE
        WHEN (SELECT COUNT(*)
             FROM proc_staff ps2
             WHERE ps2.project_no = ps.project_no
             AND ps2.proc_staff < ps.proc_staff) = 0
        THEN pl.proc_leader
        ELSE NULL
    END,
    CASE
        WHEN (SELECT COUNT(*)
             FROM proc_staff ps2
             WHERE ps2.project_no = ps.project_no
             AND ps2.proc_staff < ps.proc_staff) = 0
        THEN pc.proc_checker
        ELSE NULL
    END,
    ps.proc_staff
FROM proc_leader pl
LEFT JOIN proc_checker pc
    ON pl.projectNo = pc.projectNo
LEFT JOIN proc_staff ps
    ON pl.projectNo = ps.projectNo
WHERE pl.projectNO="17010002" ORDER BY pl.projectNo

关于mysql - 使用 LEFT JOIN 后获取重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41714936/

相关文章:

php - 列出两个连接表的结果

php - 使用 mysql 和 php 创建 xml 文件。想要添加自定义行

c# - Skip and Take 不适用于 MySQL EntityFrameworkCore

MySQL 多个 Id 查找

mysql查看索引

mysql - 截断不正确的日期值

mysql - 如何在mysql中将单行拆分为多列

php - Yii2 仅显示发布日期小于或等于当前日期时间的数据

php - MYSQL 换行

PHP/MySQL : Date lower than today