gpt4 book ai didi

Mysql连接表结果为一行

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:23 25 4
gpt4 key购买 nike

我有两张 table

pj

id | ptitle
1 | prj111
2 | prj222

prjflow

id | pid | paction | pactiontxt
1 | 1 | 1 | man1
2 | 1 | 1 | man2
3 | 1 | 2 | woman1
4 | 1 | 1 | man3

我想要这个输出:

输出

ptitle | men       | women
prj111 | man1,men3 | woman1

我写了这个查询:

SELECT prj.ptitle
, GROUP_CONCAT(pflow1.pactiontxt) men
, GROUP_CONCAT(pflow2.pactiontxt) women
FROM prj
JOIN prjflow pflow1
ON prj.id = pflow1.pid
AND pflow1.paction = 1
JOIN prjflow pflow2
ON prj.id = pflow2.pid
AND pflow2.paction = 2;

但输出是:

ptitle | men       | women
prj111 | man1,men3 | woman1,woman1

我的查询当男女行数相等时,正常工作但我希望它在任何情况下都有效。

非常感谢请原谅我糟糕的英文写作

最佳答案

只需使用条件聚合:

SELECT prj.ptitle,
GROUP_CONCAT(CASE WHEN prjflow.paction = 1 THEN prjflow.pactiontext END ORDER BY prjflow.id) as men,
GROUP_CONCAT(CASE WHEN prjflow.paction = 2 THEN prjflow.pactiontext END ORDER BY prjflow.id) as women
FROM prj JOIN
prjflow
ON prj.id = prjflow.pid
GROUP BY prj.ptitle;

这还将解决您的查询的两个潜在问题。首先是性能。如果某些职位有大量男性和女性,则查询必须处理笛卡尔积。二是语义。如果某些标题有男性但没有女性或没有男性的女性,则两个连接将过滤掉它们。

Here是一个演示它的 SQL Fiddle。

请注意,建议的输出似乎与输入数据不一致。这会产生输出:

ptitle | men            | women
prj111 | man1,man2,men3 | woman1

我认为没有合理的方法可以将 man2 从列表中排除,因此我认为这是一个打字错误。

关于Mysql连接表结果为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27331731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com