Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 通过链接表组合彼此相关的表,不用担心链接表是否缺少某些数据_Sql_Ms Access_Join_Relational Database - Fatal编程技术网

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

Sql 通过链接表组合彼此相关的表,不用担心链接表是否缺少某些数据,sql,ms-access,join,relational-database,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

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

[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
正如您所见,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
正如你所看到的,吉姆失踪是因为他没有相关的团体。 我怎样才能得到我真正想要的结果


干杯

尝试使用外部联接

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;

此外,您可能应该切换到ANSI连接语法。在这种情况下,使用Jet/ACE作为目标数据库,可能不会有太大区别,因为Jet/ACE完全相同地优化等效的隐式和显式连接。我认为在大多数情况下,连接是一个更好的主意,特别是当连接位于外键关系上时,但是隐式连接不一定有任何错误。谢谢,我发现我需要在第一个左连接周围使用括号来“避免歧义”。
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;