代码之家  ›  专栏  ›  技术社区  ›  Luca Guarro

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

  •  0
  • Luca Guarro  · 技术社区  · 7 年前

    我有三张桌子:

    2 回复  |  直到 7 年前
        1
  •  2
  •   Wolfgang Kais    7 年前

    您将需要两个查询,一个是选择B的所有ID和所需的辅助,另一个是选择所有这些组合的查询,外部连接到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);
    
        2
  •  1
  •   i-man    7 年前

    您可以将两个结果集合并在一起,一个结果集从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