首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问7个表的完全连接

访问7个表的完全连接
EN

Stack Overflow用户
提问于 2018-04-05 14:22:51
回答 1查看 330关注 0票数 0

你还好吗?

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

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

  1. ClientsID
  2. PriceTypes --表中的不同价格类型(Price1_tbl、Price2_tbl...Price7_tbl),每个表中可能有几个通用的ClientsID。

因此我需要的是:

  1. 为了获得一个唯一的ClientsID列(当然不是重复的),从这7个表中添加每个ClientID;
  2. 对于价格:7列中7个表中的价格与ClientID匹配,如果它们与ClientID匹配,则与NULL值匹配,如果该表没有ID和价格。

应该像我附在下面的指纹一样:

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

我希望在我的问题上说清楚,

提前谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-05 16:03:17

由于FULL OUTER JOIN在MS Access中不可用,并且需要一个UNION ALL of LEFT JOINRIGHT JOIN,所以可以考虑将这个过程分解成几个查询。这避免了非常嵌套的子查询派生表:

查询1 (前两个表)

代码语言:javascript
复制
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 (前两个表查询+第三个表) --生成所需的输出

代码语言:javascript
复制
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 (前三表查询+第四表)

代码语言:javascript
复制
...

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

代码语言:javascript
复制
...

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

代码语言:javascript
复制
...

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

代码语言:javascript
复制
...

注意到:您可能遇到make UNION限制或查询过于复杂,因此可以考虑将查询输出到具有make调用的临时表中:SELECT * INTO FROM (<query>)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49674765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档