2009-12-18 73 views
0

我有这样的结构的表格:重写与LEFT MySQL的子查询的JOIN

  • UID
  • SID

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

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

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

因此,两个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 

,但它不工作。请帮忙。

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

+0

解释*如何*它不工作?记录它发现它不应该或反之亦然? – ysth 2009-12-18 09:45:38

回答

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 
0

而这一个?

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

+0

猜你发现了蜱的作用:) – munch 2009-12-18 09:10:09