用LEFT JOIN重写mysql子查询

时间:2009-12-18 08:52:41

标签: sql mysql

我有一张具有这种结构的表:

  • UID
  • SID

所有整数。该表模拟了两个用户之间的友谊。

我想做的就是找到只存在于一个方向的记录。

例如: 当没有t2.s_id = 15和t2.u_id = t1.s_id的记录时,我想找到t1.u_id = 15的记录数。

因此,两个ID之间的关系只存在一次。

在我看来,我已经设法用子查询编写了正确的查询,但后来我开始使用左连接重写查询来提高速度,现在......好吧它没有用。

我现在的查询是:

SELECT * FROM `friends` AS f1 LEFT JOIN `friends` AS f2 
ON f1.user_id = f2.friend_id 
WHERE f1.friend_id=15 AND f2.user_id IS NULL

但它不起作用。请帮忙。

NB。我正在使用mysql 5,所以我不能使用EXCEPT语句和所有其他好东西。

2 个答案:

答案 0 :(得分:1)

这个怎么样?

SELECT * 
FROM `friends` AS f1 
    LEFT JOIN `friends` AS f2 ON f1.user_id = f2.friend_id AND f1.friend_id = f2.user_id
WHERE f1.friend_id=15 
    AND f2.user_id IS NULL

答案 1 :(得分:0)

这一个?

SELECT * FROM friends f1 LEFT JOIN friends f2 ON f1.user_id = f2.friend_id WHERE f1.friend_id = 15 AND f2.user_id IS NULL