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