首页 > 解决方案 > 生成两个表之间不存在的所有组合,并将它们与已经存在的组合结合 SQL

问题描述

我有 3 张桌子:

C 是 A 和 B 之间的关联类。这意味着 A 和 B 之间存在多对多关系。C 也有自己的字段,这些字段不是 A/B 的主键。

我想为给定的 A.ID (PK) 返回 C 中的所有字段。现在这部分可能会返回 0 到 * 结果。但我总是希望返回与 B 中的记录相同数量的结果。也就是说,我想用 Null 值填充 A.ID 和 B(C 中不存在的)之间缺失的组合。

样本: 在此处输入图像描述

我正在尝试在 Access 中执行此操作。如果有帮助,这里有一张图片,其中包含我正在尝试使用的特定表及其字段。

其中 A 是 ASC,B 是航班,C 是 Fl​​ightHistory。

在此处输入图像描述

标签: sqlms-access

解决方案


您将需要 2 个查询,一个选择 B 的所有 ID 以及所需的 AID,一个查询选择所有这些组合,外连接到 C 中的现有组合。这可以写在单个查询中(带有子查询) 像这样:

SELECT AB.AID, AB.BID, C.Desc
FROM (SELECT A.AID, B.BID FROM A, B WHERE (((A.AID)=1))) AB
LEFT JOIN C ON (AB.BID = C.BID) AND (AB.AID = C.AID);

推荐阅读