0

我正在努力寻找一个查询,该查询将返回不是某个成员的朋友的成员。这是我的桌子的布局:

会员登录:

MemberID, email, password

会员信息:

memberID, first_name, last_name

会员朋友:

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
                          );

有任何想法吗?

4

3 回答 3

1

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

在 youWHERE子句中,您使用的是 IN 因此返回值的子查询应该只返回Mi.Memberid列值。您的查询返回几个不同的列。应该是这样的:

....
WHERE Mi.Memberid NOT IN(
                           SELECT Mi.Memberid
                             FROM....
于 2012-09-25T15:26:07.103 回答
0

这是一个非常糟糕的设计,可能也是投票失败的原因。我会考虑将 member_friends 表设为相交表(联结表)。它将使您的设计和查询更易于使用和理解。

于 2012-09-25T15:21:49.660 回答
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 SQL关系数据库设计清晰解释(数据管理系统中的摩根考夫曼系列)(平装本),这些都是很棒的书学习基础知识和基本设计,我建议你去看看

于 2012-09-25T15:25:31.233 回答