我正在尝试找到一种方法来比较使用组合条件发送的两个查询。在这种情况下,我们有Prefixes(两个字母代码,如DA)和Pack编号1234567。在查询中,我创建了一个将这两件事组合在一起的字段,因此看起来1234567DA会通过来自它们各自独立表的每个查询来完成从。这个想法是,如果在一个表中而不是另一个表中,它将显示为“ False”。我尝试使用Unmatched查询,但这似乎不起作用。我目前所拥有的如下:
SELECT
[1LagoTest].Prefix,
[1BigPicPackPref].BigPicPP,
IIf([BigPicPP]=[LagoPP],"True","False") AS Compare,
[1LagoTest].RETAIL,
[1LagoTest].MEDIA
FROM 1LagoTest
LEFT JOIN 1BigPicPackPref
ON [1LagoTest].[Prefix] = [1BigPicPackPref].[BigPicPP]
WHERE (((IIf([BigPicPP]=[LagoPP],"True","False")) Like "False")
AND (([1LagoTest].MEDIA) Not Like "*2019 FL*"))
ORDER BY [1LagoTest].RETAIL;
现在,它将显示LagoPP缺少的内容,但不会给我带来BigPicPP缺少的内容。在正确方向上的任何帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
在没有FULL OUTER JOIN
的Access中这有点棘手,但是一般的想法是使用FULL OUTER JOIN
复制UNION ALL
,然后从中进行过滤。
类似这样的东西:
SELECT I.Prefix,
I.BigPicPP,
I.Compare,
I.Retail,
I.Media
FROM (SELECT L.Prefix,
B.BigPicPP,
IIf([BigPicPP]=[LagoPP],"True","False") as Compare,
L.Retail,
L.Media
FROM 1LagoTest L
JOIN 1BigPicPackPref B ON L.Prefix = B.BigPicPP
WHERE L.Media NOT LIKE "*2019 FL*"
UNION ALL
SELECT L.Prefix,
B.BigPicPP,
"False", --Missing records from 1BigPicPackPref
L.Retail,
L.Media
FROM 1LagoTest L
LEFT JOIN 1BigPicPackPref B ON L.Prefix = B.BigPicPP
AND L.Media NOT LIKE "*2019 FL*"
WHERE B.Prefix IS NULL
UNION ALL
SELECT B.Prefix,
B.BigPicPP,
"False", --Missing records from 1LagoTest
L.Retail,
L.Media
FROM 1LagoTest L
RIGHT JOIN 1BigPicPackPref B ON L.Prefix = B.BigPicPP
AND L.Media NOT LIKE "*2019 FL*"
WHERE L.Prefix IS NULL
) AS I
您只需要在联合的第一部分中使用IFF
,因为在后两个部分中,一侧将始终为NULL
,因此我们知道比较将始终失败并且为False
您完全不需要WHERE
的当前(((IIf([BigPicPP]=[LagoPP],"True","False")) Like "False")
子句的这一部分。但是,如果您只想查看False
条记录,只需在外部选择区的底部添加WHERE I.Compare = "False"
。
答案 1 :(得分:0)
“不匹配”查询(假设通过向导)无法工作的原因是,您正在尝试查看与两个表/查询都不匹配的两个单独的表/查询的值。这不是“无与伦比”的工作方式。仅有一个表/查询与另一个表/查询不匹配。
很可能可以通过多种方法来完成此操作,但这可能会使您到达想要的位置(或接近它的位置):
SELECT
a.Prefix,
b.BigPicPP,
IIf([BigPicPP]=[LagoPP],"True","False") AS Compare,
a.RETAIL,
a.MEDIA
FROM [1LagoTest] a
LEFT JOIN [1BigPicPackPref] b ON a.Prefix = b.BigPicPP
WHERE a.MEDIA Not Like "*2019 FL*"
AND b.BigPicPP IS NULL
ORDER BY a.RETAIL
UNION
SELECT
a.Prefix,
b.BigPicPP,
IIf([BigPicPP]=[LagoPP],"True","False") AS Compare,
a.RETAIL,
a.MEDIA
FROM [1LagoTest] a
RIGHT JOIN [1BigPicPackPref] b ON a.Prefix = b.BigPicPP
WHERE a.MEDIA Not Like "*2019 FL*"
AND a.Prefix IS NULL
ORDER BY a.RETAIL
注意:根据数据结构,ORDER BY
可能会引起一些问题。
答案 2 :(得分:0)
所以我最终得到解决的方法是构建两个单独的查询。一个正在查看Lago缺少的内容,另一个正在查看BigPic缺少的内容。这是我得到给我两套缺失数据的唯一方法。如果我能通过一个查询找到一种更好的方法,我会报告,因为我仍然会继续使用它。