我有3张桌子:
t_user(ID,名称)
t_user_deal(id,user_id,deal_id)
t_deal(id,标题)

多个用户可以链接到同一笔交易。 (我使用的是oracle,但应该类似,我可以进行调整)

如何获得所有与他打交道的唯一用户数的用户(名称)。

让我们用一些数据来解释:

t_user:
id, name
1, joe
2, mike
3, John

t_deal:
id, title
1, deal number 1
2, deal number 2

t_user_deal:
id, user_id, deal_id
1, 1, 1
2, 2, 1
3, 1, 2
4, 3, 2


我期望的结果:
user_name,与之交易的唯一用户数
乔2
迈克1
约翰1

我已经尝试过了,但是没有得到预期的结果:

SELECT tu.name,
    count(tu.id) AS nbRelations
FROM t_user tu
INNER JOIN t_user_deal tud ON tu.id = tud.user_id
INNER JOIN t_deal td ON tud.deal_id = td.id
WHERE
(
    td.id IN
    (
      SELECT DISTINCT td.id
      FROM t_user_deal tud2
      INNER JOIN t_deal td2 ON tud2.deal_id = td2.id
      WHERE tud.id <> tud2.user_id
    )
)
GROUP BY tu.id
ORDER BY nbRelations DESC


谢谢你的帮助

最佳答案

这应该给你结果

     SELECT id1, count(id2),name
     FROM (
            SELECT distinct tud1.user_id id1 , tud2.user_id id2
            FROM t_user_deal tud1, t_user_deal tud2
            WHERE tud1.deal_id = tud2.deal_id
            and tud1.user_id <> tud2.user_id) as tab, t_user tu
     WHERE tu.id = id1
     GROUP BY id1,name

09-26 12:35