【发布时间】:2015-07-03 11:55:04
【问题描述】:
我有一张桌子Entity 和一张桌子Friends。我想获取访问过同一地点的人的姓名,但我只想在他们不是该人的朋友时返回他们(建议的朋友查询)。为此,我编写了以下查询:
SELECT Entity_Id,
Category AS FC
FROM entity
LEFT
JOIN friends
ON entity.Entity_Id = friends.Entity_Id1
OR entity.Entity_Id = friends.Entity_Id2
WHERE Entity_Id IN ( :list_of_ids )
AND Entity_Id != :user_id
AND Category != 4
GROUP
BY Entity_Id
:list_of_ids 是一个逗号分隔的用户 ID 列表,在我的测试查询中有 82 个用户,但是从查询中只返回 15 个用户,其中返回的用户是与 :user_id 有关系的用户。
查询中不会返回在表中没有关系的任何用户。我认为通过提供 LEFT OUTER JOIN 它将为在朋友表中找不到的字段返回 NULL。
----- EXPECTED -----
--------------------
Entity_Id FC
--------------------
1 3
2 2
3 2
4 null
52 null
64 null
------ ACTUAL -------
---------------------
Entity_Id FC
---------------------
1 3
2 2
3 2
myfriends 表的结构如下,如果有帮助,还要注意它支持互惠关系...
------ FRIENDS ------
---------------------
fid PK
entity_id1 INT
entity_id2 INT
category INT -- 1 = Facebook, 2 = G+, 3 = App, 4 = Blocked
我如何返回丢失关系的用户?
【问题讨论】: