[英]Combine two rows in select query having same id's
我有这个查询
SELECT
`sys_forms`.`FormID`,
`sys_forms`.`FormName`,
`sys_forms`.`FormCIPath`,
`sys_forms_in_groups`.`IsMenuLink`,
`sys_forms_in_groups`.`GroupID`
FROM (`sys_forms`) INNER JOIN `sys_forms_in_groups`
ON `sys_forms_in_groups`.`FormID` = `sys_forms`.`FormID` WHERE `GroupID` = 1
UNION
SELECT
`sys_forms`.`FormID`,
`sys_forms`.`FormName`,
`sys_forms`.`FormCIPath`,
`sys_forms_in_groups`.`IsMenuLink`,
`sys_forms_in_groups`.`GroupID`
FROM (`sys_forms`) INNER JOIN `sys_forms_in_groups`
ON `sys_forms_in_groups`.`FormID` = `sys_forms`.`FormID` WHERE `GroupID` = 2
它返回我下面的数据。
如您所见,有两个相同的FormID
。
我想要的是,如果id相同,则应合并行,但对于相同的FormID, GroupID
不同。
所以我希望他们以CSV格式加入,这样结果是
FormID FormName - - GroupID
-------------------------------------------------
48 FormsIn Groups - - 1,2
您的第一个查询可以写成:
SELECT sf.`FormID`, sf.`FormName`, sf.`FormCIPath`, sfig.`IsMenuLink`, sfig.`GroupID`
FROM `sys_forms` sf INNER JOIN
`sys_forms_in_groups` sfig
ON sfig.`FormID` = sf.`FormID`
WHERE `GroupID` IN (1, 2);
注意使用表别名和in
的单个where
子句。
要获得所需的内容,请使用group by
并仅包含所需的列:
SELECT sf.`FormID`, sf.`FormName`,
group_concat(sfig.`GroupID`) as groupids
FROM `sys_forms` sf INNER JOIN
`sys_forms_in_groups` sfig
ON sfig.`FormID` = sf.`FormID`
WHERE `GroupID` IN (1, 2)
GROUP BY sf.`FormID`, sf.`FormName`, sf.`FormCIPath`, sfig.`IsMenuLink`;
指定的结果可以通过如下查询返回:
SELECT f.FormID
, f.FormName
, f.FormCIPath
, MAX(g.IsMenuLink) AS IsMenuLink
, GROUP_CONCAT(DISTINCT g.GroupID ORDER BY g.GroupID) AS GroupIDs
FROM `sys_forms` f
JOIN `sys_forms_in_groups` g
ON g.FormID = f.FormID
AND g.GroupID IN (1,2)
GROUP BY f.formID
GROUP_CONCAT
聚合将多个值组合成一个逗号分隔的列表。 (可以指定其他定界符,默认为逗号。)
我们在IsMenuLink
列周围使用MAX
聚合,因此我们获得了一个非NULL值代替NULL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.