你还好吗?
我是这个SQL/Access世界中的新手,我真的需要您的智慧,以便在SQL中进行模拟的FULL JOIN或合并7个表的最佳选项。
我和LEFT/RIGHT JOIN + UNION试过了,但没有成功。这些表只有两个值列:
因此我需要的是:
NULL值匹配,如果该表没有ID和价格。应该像我附在下面的指纹一样:

这个例子我只放了3张表。我知道Access不支持FULL JOIN,我对解决这个问题的新方法持开放态度。
我希望在我的问题上说清楚,
提前谢谢!!
发布于 2018-04-05 16:03:17
由于FULL OUTER JOIN在MS Access中不可用,并且需要一个UNION ALL of 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 (前六表查询+第七表)--最终结果
...注意到:您可能遇到make UNION限制或查询过于复杂,因此可以考虑将查询输出到具有make调用的临时表中:SELECT * INTO FROM (<query>)。
https://stackoverflow.com/questions/49674765
复制相似问题