我有一个包含3个表的数据库。这些表代表会员信息。我只想检索特定用户不属于的组的结果。我不知道该怎么做。目前,我正在考虑以下内容:
SELECT
g.*,
a.*
FROM
GroupInfo g
INNER JOIN [Address] a ON a.[ID]=g.[AddressID]
OUTER JOIN [GroupMembership] m ON m.[GroupID]=g.[ID]
WHERE
m.[MemberID]<>@memberID
我关注准确性和性能。我会走正确的路吗?
答案 0 :(得分:0)
另一种方法是
Select * From GroupInfo g Join Address a
On a.Id = g.AddressId
Where Not Exists
(Select * From GroupMembership
Where GroupID = g.GroupID
And MemberID = @memberID)
答案 1 :(得分:0)
我对这两种方法中的哪一种更快有疑问,所以我编写了一个测试。我创建了2个表,第一个表还包含第二个表的外键。然后我在表1中创建了一百万个条目,其中大约一半在表2中创建了一个链接条目。
然后我运行了连接版本和子查询版本。他们俩都提出了相同的价值观(好)。
有趣的是,它也完全相同:在我可怜的工作站上大约20秒。因此,如果您按照提议的方式或其他方式执行此操作似乎并不重要。如果连接表可能有多个值,我认为在子查询中添加前1会更快。
Select * From GroupInfo g Inner Join Address a
On a.Id = g.AddressId
Where Not Exists
(Select Top 1 * From GroupMembership Where GroupID = g.GroupID
And MemberID = @memberID)