访问7个表的FULL JOIN

时间:2018-04-05 14:22:52

标签: sql ms-access

你好吗?

我是这个SQL / Access世界的新手,我真的需要你的智慧,以便在SQL-ACCESS中进行模拟FULL JOIN或合并7个表的最佳选项。

我已经尝试LEFT/RIGHT JOIN + UNION,但没有成功。这些表只有两个值列:

  1. ClientsID
  2. PriceTypes - 表格中的不同价格类型(Price1_tbl,Price2_tbl ... Price7_tbl),每个表格在7个表格中都有一些常见的 ClientsID
  3. 我需要的是:

    1. 获取一个唯一的 ClientsID 列(当然不会重复),从这7个表中附加每个 ClientID ;
    2. 并且对于价格:7列中7个表中的价格与 ClientIDs 相对应,如果它们与 ClientID NULL值匹配则匹配如果该表没有价格的 ID
    3. 应该像下面附带的印刷品一样:

      Example_with3_tables

      我只为这个例子放了3个表。我知道Access不支持FULL JOIN,我对解决此问题的新方法持开放态度。

      我希望在我的问题中明确,

      提前致谢!!

1 个答案:

答案 0 :(得分:0)

由于FULL OUTER JOIN在MS Access中不可用且需要UNION ALL LEFT JOINRIGHT JOIN,因此请考虑将该流程拆分为多个查询。这避免了非常嵌套的子查询派生表:

查询1 (前两张表)

SELECT a.ClientID, a.PRICE_A, b.PRICE_B
FROM ClientPriceA a LEFT JOIN ClientPriceB b
  ON a.CLIENTID = b.CLIENTID 
WHERE a.ID IS NOT NULL;

UNION ALL 

SELECT b.ClientID, a.PRICE_A, b.PRICE_B
FROM ClientPriceA a RIGHT JOIN ClientPriceB b
  ON a.CLIENTID = b.CLIENTID 
WHERE b.ID IS NOT NULL;

查询2 (前两个表查询+第三个表) - 生成所需的输出

SELECT m.*
FROM 
  (SELECT f.ClientID, f.PRICE_A, f.PRICE_B, c.PRICE_C
   FROM Query1 f
   LEFT JOIN ClientPriceC c ON f.ClientiD = c.ClientID
   WHERE f.ClientID IS NOT NULL

   UNION ALL

   SELECT c.ClientID, f.PRICE_A, f.PRICE_B, c.PRICE_C
   FROM Query1 f
   RIGHT JOIN ClientPriceC c ON f.ClientiD = c.ClientID
   WHERE c.ClientID IS NOT NULL
  )  AS m
ORDER BY m.ClientID;

然后对所有其他人重复处理:

查询3 (前三个表查询+第四个表)

...

查询4 (前四个表查询+第五个表)

...

查询5 (前五个表查询+第六个表)

...

查询6 (前六个表查询+第七个表) - 最终结果

...

注意:您可能会遇到MS Access UNION限制或查询过于复杂,因此请考虑使用make-table调用将查询输出到临时表中:SELECT * INTO FROM (<query>)。< / p>