SQL查找不是其他成员的朋友的成员

时间:2012-09-25 15:13:18

标签: mysql sql

我正在努力寻找能够让某些成员不是朋友的成员的查询。这是我的表的布局:

member_login:

MemberID, email, password

member_info:

memberID, first_name, last_name

member_friends:

friendID, req_member, req_date, app_member, app_date, date_deactivated

我尝试使用NOT IN来运行一个返回朋友对面的查询,但我尝试的任何东西似乎都没有用。这就是我认为可行的方法:

SELECT Mi.First_Name, Mi.Last_Name
  FROM Member_Info Mi
 WHERE Mi.Memberid NOT IN(
                           SELECT Mi.Memberid, Mi.First_Name, Mi.Last_Name
                             FROM Member_Info Mi, Member_Login Ml, Member_Friends Mf
                            WHERE Mi.Memberid = Ml.Memberid
                               AND (Mi.Memberid = Mf.Req_Member
                                   AND Mf.App_Member = 1
                                   OR Mi.Memberid = Mf.App_Member
                                   AND Mf.Req_Member =1)
                               AND Ml.Date_Deactivated <= 0
                               AND Mf.App_Date > 0
                          );

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

@Thedirktastik,请检查IN子句的正确用法。在the MSDN中,您可以查看一下。

在您使用IN的WHERE子句中,返回值的子查询应仅返回Mi.Memberid列值。并且您的查询返回了几个不同的列。应该是这样的:

....
WHERE Mi.Memberid NOT IN(
                           SELECT Mi.Memberid
                             FROM....

答案 1 :(得分:0)

这是一个非常糟糕的设计,可能是投票率下降的原因。我将研究使member_friends表成为intersect表(联结表)。它将使您的设计和查询更容易使用和理解。

答案 2 :(得分:0)

如果你尝试

怎么办?
SELECT Mi.First_Name, Mi.Last_Name
  FROM Member_Info Mi
 WHERE Mi.Memberid NOT IN(
                           SELECT Mi.Memberid
                              FROM Member_Info Mi, Member_Login Ml, Member_Friends 
                            WHERE Mi.Memberid = Ml.Memberid
                               AND (Mi.Memberid = Mf.Req_Member
                                   AND Mf.App_Member = 1
                                   OR Mi.Memberid = Mf.App_Member
                                   AND Mf.Req_Member =1)
                               AND Ml.Date_Deactivated <= 0
                               AND Mf.App_Date > 0
                          );

因为你在NOT IN(...)中返回三个值时应该是一个

SELECT Mi.Memberid, Mi.First_Name, Mi.Last_Name

应该是

SELECT Mi.Memberid

您可能会收到有关FROM语句的其他错误,因为您需要一起加入表来比较值,但您的朋友表没有任何匹配值,因此这可能是一个问题(设计不佳)

编辑:数据库设计

其中很多都归结为体验,但有一些好书可以查看,如Head First SQLRelational Database Design Clearly Explained (The Morgan Kaufmann Series in Data Management Systems) (Paperback),这些都是学习基础知识和基本设计的好书,我建议你看看它们