我有两个数据库表,类别和超级类别,用于我正在开发的库存控制系统:
类别:ID_Category、类别名称
超级类别:ID_SuperCategory、类别 ID、超级类别 ID
我将类别-子类别关系放入 SuperCategories 表中。我将所有类别放入“类别”表中。
这是一个例子:
Categories:
ID_Category CategoryName
1 Box
2 Red Box
3 Blue Box
4 Blue Plastic Box
5 Can
6 Tin Can
SuperCategories:
ID_Super CategoryID SuperCategoryID
1 2 1
2 3 1
3 4 3
4 6 5
CategoryID 和 SuperCategoryID 与类别表中的主键 ID_Category 相关。
我想要的是一个返回所有不属于任何其他类别的父级的类别名称的查询:
Red Box
蓝色塑料盒
锡罐
这相当于查找未出现在 SuperCategoryID 列(2、4 和 6)中的 ID_Category 的所有值,但我在编写 SQL 时遇到了问题。
我正在使用 VB6 查询 Access 2000 数据库。
任何帮助表示赞赏。谢谢!
EDIT:我对每个人的答案都投了赞成票,这些答案给了我一些有用的东西。我接受了我认为最有启发性的答案。再次感谢你的帮助!
Mike Pone 的答案有效,因为他将“Categories”表与“SuperCategories”表作为“LEFT OUTER JOIN”连接起来 - 这将从“Categories”中获取所有条目,并将“SuperCategories”中的列添加到链接存在的列中 -如果它不存在(例如,“SuperCategories”中没有条目),您将获得 SuperCategories 列的 NULL - 这正是 Mike 的查询随后检查的内容。
如果您像这样编写查询:
SELECT c.CategoryName, s.ID_Super
FROM Categories c
LEFT OUTER JOIN SuperCategories s ON c.ID_Category = s.SuperCategoryID
你会得到这样的东西:
CategoryName ID_Super
Box 1
Box 2
Red Box NULL
Blue Box 3
Blue Plastic Box NULL
Can 4
Tin Can NULL
因此,这基本上给出了您的答案 - LEFT OUTER JOIN 上的 ID_Super 为 NULL 的所有行都是 SuperCategories 表中没有任何条目的行。全清? :-)
Marc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)