Access中的SQL帮助 - 寻找数据的缺失

Sha*_*kin 2 sql ms-access derived-table

我试图找到最快的方法来查找父表中没有子表中的某些记录的所有记录.例如,我希望查询返回所有没有男孩或根本没有孩子的家庭记录.

例1

这很痛苦:

SELECT*FROM Families
WHERE Families.FamilyID NOT IN(选择FamilyID FROM Children WHERE Children.Gender ="m")

例2

这更快:

SELECT*FROM Families
WHERE NOT EXISTS(SELECT*FROM Children WHERE Children.Gender ="m"AND Children.FamilyID = Families.FamilyID)

例3

这是最快的,但我担心投资它,因为我找不到任何文件.我甚至不知道它叫什么.由于缺少更好的术语,我们一直称之为"匿名查询".

SELECT*FROM Families
LEFT JOIN
[SELECT*FROM Children WHERE Gender ="m"].AS AliasChildren ON Families.FamilyID = AliasChildren.FamilyID
WHERE AliasChildren.FamilyID IS NULL

所以我的问题是:

  1. 这个例子在例3中被称为什么?
  2. 它是未来支持的Access的"主流"功能吗?
  3. 我在哪里可以找到它的文档(一旦我知道它的名称,这可能会更容易)?

谢谢!

Mit*_*eat 6

示例3称为派生表,但您可以将查询简化为:

SELECT * FROM Families
LEFT JOIN
Children ON Families.FamilyID = Children.FamilyID AND Children.Gender="m"
WHERE Children.FamilyID IS NULL 
Run Code Online (Sandbox Code Playgroud)