通过链接表组合彼此相关的表,并且不用担心链接表是否缺少某些数据

时间:2010-12-14 18:43:27

标签: sql ms-access join relational-database

我有一个简单的关系数据库设置,类似于下面的例子

[Customer] --< [CGLink] >-- [Order]

Person:
Alias Name(PK)
A     Bill
B     Ben
C     Bob
D     Jim
E     John

CGLink:
ID(PK) Alias Type
1      A     W
2      A     X
3      B     W
4      B     X
5      B     Y
6      B     Z
7      C     Y
8      E     Z

Group:
Type(PK) Group
W        Double-U
X        Eks
Y        Whai
Z        Zed

我想返回一组像

这样的结果
Alias   Name   Group
A       Bill   Double-U
A       Bill   Eks
B       Ben    Double-U
B       Ben    Eks
B       Ben    Whai
B       Ben    Zed
C       Bob    Whai
D       Jim    
E       John   Zed

正如您所看到的,Jim在链接表中没有相关数据,我想避免放置一行虚拟数据,我可以将所有人链接到没有组的人,以便让我返回数据

我正在使用的查询是

SELECT p.Alias, p.Name, g.Group
FROM Person AS p, Group AS s, CGLink AS l
WHERE (p.Alias=l.Alias
AND l.Type=s.Type)
ORDER BY p.Alias, p.Name;

返回

Alias   Name   Group
A       Bill   Double-U
A       Bill   Eks
B       Ben    Double-U
B       Ben    Eks
B       Ben    Whai
B       Ben    Zed
C       Bob    Whai
E       John   Zed

你可以看到,因为他没有相关的小组而错过了Jim。 我怎样才能获得我真正想要的结果?

干杯

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

尝试使用OUTER join

SELECT p.Alias, p.Name, g.Group
FROM Person AS p
LEFT OUTER JOIN Group AS s ON p.Alias=l.Alias
LEFT OUTER JOIN CGLink AS l ON l.Type=s.Type
ORDER BY p.Alias, p.Name;