你好吗?
我是这个SQL / Access世界的新手,我真的需要你的智慧,以便在SQL-ACCESS中进行模拟FULL JOIN
或合并7个表的最佳选项。
我已经尝试LEFT/RIGHT JOIN + UNION
,但没有成功。这些表只有两个值列:
我需要的是:
答案 0 :(得分:0)
由于FULL OUTER JOIN
在MS Access中不可用且需要UNION ALL
LEFT JOIN
和RIGHT 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>