gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:04:03 26 4
gpt4 key购买 nike

我想将 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com