【发布时间】:2017-12-28 16:57:28
【问题描述】:
我有两个查询和一个要合并的表:
- [产品需求](表格)
- [北美供应](查询)
- [欧盟供应](查询)
这三个具有相同的字段:
- 日期
- 地区
- 产品
- 数量
虽然,我会说在供应查询中,我强制 Date 和 Region 为静态值,而 Product 和 Quantity 是从表中提取的。例如:
SELECT
DateValue("12/1/2017") AS [Date],
"North America" AS [Region], <-- Would be "Europe" for [EU Supply]
[NA Inv Report].[Product],
[NA Inv Report].[Quantity]
FROM [NA Inv Report] <-- Would be "EU Inv Report" for [EU Supply]
WHERE ((([NA Inv Report].[Quantity])>0));
然后我有一个基本的联合查询,称为[uQuery: Combo]:
SELECT
[Product Demand].[Date] AS [Date],
[Product Demand].[Region] AS [Region],
[Product Demand].[Product] AS [Product]
FROM [Product Demand]
UNION SELECT
[NA Supply].[Date] AS [Date],
[NA Supply].[Region] AS [Region],
[NA Supply].[Product] AS [Product]
FROM [NA Supply]
UNION SELECT
[EU Supply].[Date] AS [Date],
[EU Supply].[Region] AS [Region],
[EU Supply].[Product] AS [Product]
FROM [EU Supply];
然后,我将该联合查询拉入一个新查询;
SELECT
[uQuery: Combo].Date,
[uQuery: Combo].Region,
[uQuery: Combo].Product
FROM [uQuery: Combo];
这说明了一切!
但这是令人困惑的事情;如果我 LEFT JOIN Product Demand,它仍然显示一切。 但是如果我离开NA Supply 或EU Supply 之一,那么它会将结果过滤到添加的表中。如果我添加两个供应表,则不会显示任何结果。
SELECT
[uQuery: Combo].Date,
[uQuery: Combo].Region,
[uQuery: Combo].Product
FROM (([uQuery: Combo]
LEFT JOIN [Product Demand] ON <-- Adding just this will show everything
([uQuery: Combo].Product = [Product Demand].Product) AND
([uQuery: Combo].Region = [Product Demand].Region) AND
([uQuery: Combo].Date = [Product Demand].Date))
LEFT JOIN [NA Supply] ON <-- Adding this will only show matching results for [NA Supply]
([uQuery: Combo].Product = [NA Supply].Product) AND
([uQuery: Combo].Region = [NA Supply].Region) AND
([uQuery: Combo].Date = [NA Supply].Date))
LEFT JOIN [EU Supply] ON <-- Adding this will hide all results
([uQuery: Combo].Product = [EU Supply].Product) AND
([uQuery: Combo].Region = [EU Supply].Region) AND
([uQuery: Combo].Date = [EU Supply].Date);
【问题讨论】:
-
替换为
union all -
@StevenBENET 这并不能解决问题。我还应该注意到,对于另一组表,我有一个几乎相同的 Union/Left-Join 组合,并且在没有
UNION ALL SELECT的情况下它可以完美地工作。澄清一下,我的 Union 查询确实显示了所有内容。只有当我将它用作 LEFT JOIN 查询的基础时,它才会开始隐藏结果。 -
为什么你在联合查询中将相同的查询自加入到自己身上?你的最终结果是什么?这与XY Problem 相呼应,您在其中需要 Y 解决方案的帮助,但没有告诉我们 X 问题,并且 X 可能根本不需要 Y。
-
@Parfait 我有 3 个单独的报告要合并;需求(包括北美和欧盟),然后是北美供应和欧盟供应。我的想法是使用联合查询来获取所有可能的日期/地区/产品组合,以便我可以以此为基础向我展示每个日期/地区/产品的供应/需求摘要。
标签: sql ms-access left-join union