一行多个答案

时间:2015-05-26 14:49:36

标签: mysql

我有以下表格:

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

谁能告诉我如何才能解决这个问题?

2 个答案:

答案 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

联接更改为LEFTlead = '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