如何在 SQL Workbench 中通过 2 个外键合并 2 行?

How to merge 2 rows by 2 foreign keys in SQL Workbench?

所以我有一个数据库,其中两个表之间有双重连接。

现在我必须找出哪两个人彼此之间发送的消息最多。

我喜欢这样:

 create view temp as select Uporabnik_idUporabnik1,Uporabnik_idUporabnik2, count(Sporocilo.id) as 
 st_sporocil from Sporocilo group by Sporocilo.Uporabnik_idUporabnik1, 
 Sporocilo.Uporabnik_idUporabnik2; select * from temp;

问题是这只计算一种方式的通信。因此它将计算 user1 发送给 user2 的消息数以及 user2 发送给 user1 的消息数作为 2 个不同的行。

那么如何合并行 row1 fk1=row2 fk2 和 row2 fk1=row1 fk2 的行?

 create view temp as
 select Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,count(idSporocilo) as st_sporocil   
 FROM 
  ( SELECT Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,idSporocilo from Sporocilo 
    UNION 
    SELECT Uporabnik_idUporabnik2,Uporabnik_idUporabnik1,idSporocilo from Sporocilo 
  ) t
WHERE Uporabnik_idUporabnik1 > Uporabnik_idUporabnik2
GROUP BY Uporabnik_idUporabnik1,Uporabnik_idUporabnik2

反向的 UNION 将为您提供 2 条消息的数量。因为您会将发送者、接收者和接收者、发送者分组。 现在的问题是你仍然会得到两行。 F.ex:

Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,st_sporocil
1,10,4
10,1,4

为了只显示一行,我添加了过滤器 Uporabnik_idUporabnik1 > Uporabnik_idUporabnik2 这将只显示第一行。小心,因为这会抑制自我对话(发送者与接收者相同)