微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据其他行值连接和连接行

如何解决根据其他行值连接和连接行

我正在尝试根据问题和用户列组合表。文本应该连接起来,用空格分隔(文本组合的顺序无关紧要)。我只关心这三列。

表 1:

问题 用户 文字 other_column
1 用户 1 asdf 废话
2 用户 2 qwer 废话
2 用户 2 zxcv 废话

表 2:

问题 用户 文字 other_column
1 用户 1 1234 废话
2 用户 2 5678 废话
2 用户 2 7890 废话
3 用户 3 6845 废话

结果表:

问题 用户 文字
1 用户 1 asdf 1234
2 用户 2 qwer zxcv 5678 7890
3 用户 3 6845

这是我目前的代码。我尝试在 SELECT 行中使用 Group_concat(table1.Text)、Group_concat(table1.Text,table2.text) 和 table1.TEXT(每个单独),但它们没有给出所需的结果。

SELECT table1.Issue,table1.User
FROM table1 join table2
ON table1.Issue = table2.Issue and table1.User = table2.User
GROUP BY Issue,User

谢谢

解决方法

您可以尝试使用带有 group_concat() 的子查询按常见问题和用户进行聚合,使用 concat 作为结果

select t1.issue,t1.user,concat(t1.`text`,' ',t2.text) `text`
from (
    select a.issue,a.user,group_concat(a.`text` separator ' ') `text`
    from table1 a 
    group by a.issue,a.user
) t1 
inner join (
    select b.issue,b.user,group_concat(b.`text` separator) `text`
    from table2 b
    group by b.issue,b.user

    ) t2 on t1.issue = t2.issue,t1.user = t2.user

对于新的数据集,您应该使用由子查询派生的主表,用于问题和用户的联合

select t3.issue,t3.user,t2.text) `text`
from (
    select issue,user
    from table1
    union 
    select issue,user
    from table2 
)left JOIN (
    select a.issue,a.user
) t1  ON t1.issue = t3.issue,t1.user = t3user
left  join (
    select b.issue,b.user

    ) t2 on t31.issue = t2.issue,t3.user = t2.user 
,

你必须对这两个表进行``CONCATbothGROUP_CONCAT`。

要没有交叉连接,您还需要在“GROUP_CONCAT”中放入一个 DISTINCT

单个 Group Concat 可以订购,但是洞 Text ,你将不得不使用另一种方式。

架构(MySQL v5.7)

CREATE TABLE table1 (
  `Issue` INTEGER,`User` VARCHAR(5),`Text` VARCHAR(4),`other_column` VARCHAR(4)
);

INSERT INTO table1
  (`Issue`,`User`,`Text`,`other_column`)
VALUES
  ('1','User1','asdf','blah'),('2','User2','qwer','zxcv','blah');

CREATE TABLE table2 (
  `Issue` INTEGER,`Text` INTEGER,`other_column` VARCHAR(4)
);

INSERT INTO table2
  (`Issue`,'1234','5678','7890','blah');

查询 #1

SELECT 
t1.Issue,t1.User,CONCat (GROUP_CONCAT(DISTiNCT t1.`Text`),',GROUP_CONCAT(DISTINCT t2.`Text`)) as 'Text'
FROM table1 t1 join table2 t2
ON t1.Issue = t2.Issue and t1.User = t2.User
GROUP BY t1.Issue,t1.User;
问题 用户 文字
1 用户 1 asdf,1234
2 用户 2 qwer,zxcv,5678,7890

View on DB Fiddle

就像我在评论中所说的那样,您需要模拟 FULL OUTER JOIN

架构(MySQL v8.0)

CREATE TABLE table1 (
  `Issue` INTEGER,('3','User3','6845','blah');

查询 #1

(SELECT 
t1.Issue,IF(GROUP_CONCAT(DISTINCT t1.`Text`) IS NULL,(GROUP_CONCAT(DISTiNCT t2.`Text`)),CONCat (GROUP_CONCAT(DISTINCT t1.`Text`),GROUP_CONCAT(DISTiNCT t2.`Text`) )        
) as 'Text'
FROM table1 t1 LEFT join table2 t2
ON t1.Issue = t2.Issue and t1.User = t2.User
GROUP BY t1.Issue,t1.User)
              UNION 
              (SELECT 
t1.Issue,IF(GROUP_CONCAT(DISTINCT t2.`Text`) IS NULL,(GROUP_CONCAT(DISTiNCT t1.`Text`)),CONCat (GROUP_CONCAT(DISTINCT t2.`Text`),GROUP_CONCAT(DISTiNCT t1.`Text`) )        
) as 'Text'
FROM table2 t1 left join table1 t2
ON t1.Issue = t2.Issue and t1.User = t2.User
             GROUP BY t1.Issue,t1.User);
问题 用户 文字
1 用户 1 asdf,7890
3 用户 3 6845

View on DB Fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。