生成两个表之间尚不存在的所有组合,并将它们与已存在的SQL合并

时间:2018-07-25 02:23:06

标签: sql ms-access

我有3张桌子:

  • A
  • B
  • C

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

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

示例: enter image description here

我正在尝试在Access中执行此操作。 如果有帮助的话,下面是我尝试使用的带有特定表及其字段的图像。

其中A是ASC,B是飞行,C是FlightHistory。

enter image description here

2 个答案:

答案 0 :(得分:2)

您将需要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);

答案 1 :(得分:1)

您可以将两个结果集结合在一起,一个从C获取主要记录,另一个从B获取缺少的记录...

SELECT * FROM C WHERE C.AID = 1
UNION
SELECT 1 as AID, ID as BID, '' as Desc FROM B WHERE ID NOT IN (SELECT BID FROM C WHERE C.AID = 1)
ORDER BY BID;

http://sqlfiddle.com/#!9/02d110/11/0