MySQL多表JOIN查询实现:获取Kando中Product launch看板的卡片信息
SQL查询问题解决方案
原查询的错误点
- 同时混用隐式连接(逗号分隔多表)和显式
JOIN语法,连接逻辑混乱,会产生大量无效的笛卡尔积数据 - 缺少
card表与列、用户表的关联条件,无法正确匹配卡片所属的列、创建人和分配人 - 仅实现了创建人的部分查询逻辑,未覆盖分配成员的查询需求
- 子查询写法不符合规范,缺少
FROM子句,无法正常执行
正确查询语句
SELECT c.description AS 卡片详情, col.column_title AS 卡片所在列标题, u_creator.UserName AS 卡片创建人, GROUP_CONCAT(DISTINCT u_assignee.UserName SEPARATOR '、') AS 卡片分配成员 FROM board b INNER JOIN `column` col ON b.BoardID = col.boardID INNER JOIN card c ON col.columnID = c.columnID INNER JOIN `user` u_creator ON c.Creator = u_creator.userID -- 卡片分配人多对多关联逻辑,如是一对一关联可调整为直接关联card表的assignee字段 LEFT JOIN card_assignee ca ON c.cardID = ca.cardID LEFT JOIN `user` u_assignee ON ca.userID = u_assignee.userID WHERE b.boardname = 'Product launch' GROUP BY c.cardID, c.description, col.column_title, u_creator.UserName;
适配说明
如果你的表结构中卡片和分配人是一对一关联(即card表存在assignee_id字段直接关联用户表),可以删除card_assignee相关的连接逻辑,将分配人关联修改为LEFT JOIN user u_assignee ON c.assignee_id = u_assignee.userID,同时去掉GROUP BY和GROUP_CONCAT相关代码即可。
内容的提问来源于stack exchange,提问作者itadaki33
相关产品推荐
相关产品推荐

