我有以下表格:
matters(matterid, mattername, refno)
mattersjuncstaff(junked, matterid, staffid, lead)
staff(staffid, staffname)
一个问题可能会有一些与之相关的工作人员,其中一些工作人员将被标记为“潜在客户”,即他们在“领导”字段中会有一个“Y”。
我希望显示一张表格,其中包含事项列表,事项名称和参考号以及标记为潜在客户的员工,最好是一行。所以它看起来像:
reference | mattername | Lead Staff |
ABC1 | matter abc & Co | Fred Smith, Jane Doe, Naomi Watts |
等
我正在使用下面的代码,但这只显示一个标有Y的前导字段的人。
SELECT refno, mattername, matters.matterid, staffname
FROM matters
INNER JOIN matterjuncstaff
USING (matterid)
Inner join staff
using (staffid)
Inner join matterjuncactions
On matterjuncactions.matterid = matters.matterid
WHERE lead = 'Y'
GROUP BY matters.matterid, nickname
谁能告诉我如何才能解决这个问题?
答案 0 :(得分:1)
您希望连接连接中的值并将其表示为结果集中的字段。 GROUP_CONCAT函数适用于此类查询:
SELECT m.matterid, m.refno, m.mattername, GROUP_CONCAT(s.staffname) AS LeadStaff
FROM matters m
LEFT JOIN matterjuncstaff mjs ON mjs.matterid = m.matterid AND lead = 'Y'
LEFT JOIN staff s ON s.staffid = mjs.staffid
GROUP BY m.matterid, m.refno, m.mattername
联接更改为LEFT
并lead = 'Y'
移动到那里,否则您将失去matters
而没有领导人员。
如果您只希望INNER JOIN
拥有一些主管人员,请使用matters
我已删除matterjuncactions
,因为您没有提供其信息。
答案 1 :(得分:0)
使用mysql中的GROUP_CONCAT()函数将查询中的值连接成一个字符串。
例如,您可以为每个事项选择一行,并附加一个列,其中包含所有连接的潜在客户名称,如下所示:
SELECT m.refno,
m.mattername,
(Select GROUP_CONCAT(distinct staffname SEPARATOR ', ')
from mattersjuncstaff js
join staff s
on s.staffid = js.staffid
where js.lead = 'Y'
and js.matterid = m.matterid) as LeadStaffMembers
FROM matters m
<强>更新强>
以下是相同的示例,但添加的列显示了不是主角的员工。
SELECT m.refno,
m.mattername,
(Select GROUP_CONCAT(distinct staffname SEPARATOR ', ')
from mattersjuncstaff js
join staff s
on s.staffid = js.staffid
where js.lead = 'Y'
and js.matterid = m.matterid) as LeadStaffMembers,
(Select GROUP_CONCAT(distinct staffname SEPARATOR ', ')
from mattersjuncstaff js
join staff s
on s.staffid = js.staffid
where js.lead <> 'Y'
and js.matterid = m.matterid) as NonLeadStaffMembers
FROM matters m