2011-11-25 62 views
0

表:SQL不同的加入

  • 活动:ID,用户id,描述,OBJECTID
  • 用户:ID,名称
  • usersFriends,ID,用户id,friendUserId
  • 对象:ID,名称

当前查询:

SELECT A.*, U.* 
    FROM usersFriends UF 
    JOIN activities A ON A.userId = UF.friendUserId 
    JOIN users U ON U.id = A.userId 
    WHERE A.objectId = x 

与当前查询的问题是,如果用户有匹配的朋友例如:

  • 用户1:添
  • 用户2:莱恩
  • 用户3:阿伦
  • 用户4:查理

Tim是朋友查理 瑞安朋友查理

我们得到了对象X的活动,但是我们得到的所有活动都是双重的,因为tim是charlie的朋友,而ryan是charlie的朋友,所以我需要某种独特的东西?

感谢您的帮助!

+0

您使用的是什么版本的SQL?该查询看起来像不会在任何方言中工作... – Sparky

+0

wooeps那是错误的,修复! – user1066101

+0

@ user1066101 - 你为什么使用'UserFriends'表?看起来你不需要它。或者你只想要与其他用户的朋友的活动? – Lamak

回答

0

我平时做这样的... AND A.userId < UF.userId

SELECT A.*, U.* 
    FROM usersFriends UF 
    JOIN activities A ON A.userId = UF.friendUserId AND A.userId < UF.userId 
    JOIN users U ON U.id = A.userId 
    WHERE A.objectId = x 
0

嗯,看来你可以做下面的查询(虽然我真的不理解其中的逻辑):

SELECT A.*, U.* 
FROM (SELECT DISTINCT friendUserId FROM usersFriends) UF 
JOIN activities A ON A.userId = UF.friendUserId 
JOIN users U ON U.id = A.userId 
WHERE A.objectId = x 

或者

SELECT DISTINCT A.*, U.* 
FROM usersFriends UF 
JOIN activities A ON A.userId = UF.friendUserId 
JOIN users U ON U.id = A.userId 
WHERE A.objectId = x