我知道这个问题可能听起来令人困惑,但让我试着简化它。
我有一个查询,让我们调用query1,以及一个更大的所有产品表。这是query1:
Item_Code Description Order_Qty Option
1000 Prod1 5 Blue
1005 Prod5 3 Brown
1602 Prod6 1 Red
5620 Prod8 6 Yellow
9865 Prod2 1 Brown
1624 Prod3 3 Brown
9876 Prod12 4 Blue
现在在我的表格中,我有一个更大的相同格式的产品列表。我想创建一个包含所有蓝色,棕色,红色和黄色的新查询。它有效,但总有重复。
我不确定如何发布我的尝试,但我会解释我的尝试。我创建了一个新查询并包含了table和query1。我在两者之间建立了关系,只包括“选项”相等的行。但由于某种原因,生成的查询将出现重复。如:
Item_Code Description Order_Qty Option
1000 Prod1 5 Blue
1009 <-- Prod2 6 Blue
1009 <-- Prod2 6 Blue
1010 <-- Prod9 7 Blue
1010 <-- Prod9 7 Blue
1011 <-- Prod11 9 Blue
1011 <-- Prod11 9 Blue
9876 <-- Prod12 4 Blue
9876 <-- Prod12 4 Blue
1005 <-- Prod5 3 Brown
1005 <-- Prod5 3 Brown
9865 <-- Prod2 1 Brown
9865 <-- Prod2 1 Brown
1624 <-- Prod3 3 Brown
1624 <-- Prod3 3 Brown
9877 Prod99 7 Brown
1111 <-- Prod67 8 Brown
1111 <-- Prod67 8 Brown
1602 Prod6 1 Red
1752 Prod56 2 Red
5620 Prod8 6 Yellow
最糟糕的是,它不会总是重复。也许我接近它错了。
我知道这可能是tldr的情况,但如果有人能提供帮助那就太棒了。
感谢。
答案 0 :(得分:2)
您需要在查询中添加GROUP BY
子句或DISTINCT
关键字。
SELECT DISTINCT Item_Code, Description, Order_Qty, Option
(或点击Access中的任何选项都会做同样的事情。)
根据您提供的信息,无法诊断查询返回“重复”行的原因。
当all_products
中的行与query1
中的两行或多行匹配时,查询返回“重复”行,因此您可以从all_products
获取每行匹配的行副本来自query1
的行。
如果您从query1获得了Option
的明确列表,则可能会获得更好的性能。 (我并没有真正“做”MS Access。我提出了这个问题,因为它被标记为“mysql”.Jot数据库引擎很酷,但它在多用户环境中运行不正常。)在SQL中服务器,Oracle,MySQL,DB2,Teradata等。我们写这样的查询:
SELECT p.Item_Code
, p.Description
, p.Order_Qty
, p.Option
FROM mytable p
JOIN ( SELECT q1.Option
FROM query1 q1
GROUP BY q1.Option
) q
ON q.Option = p.Option
答案 1 :(得分:2)
您的查询返回重复项,因为您可能只从一个表中选择列,但您的连接不够具体,因此生成的笛卡尔积会使您的结果倍增。即因为您的唯一加入是option = option
,这意味着每个blue
会加入其他所有blue
。您可能希望在连接中的ON子句中有更多限制。
使用distinct
可能会使它看起来像是正确答案,但您只是掩盖了问题。
答案 2 :(得分:0)
如果我正确理解了您的问题,则希望将Query1用作一种查找表,以从表中选择行。
所以您可以这样做:
select * from table
where color in
(select color from query1)
如果要基于2个字段制定选择标准,则可以执行以下操作:
select * from table
where color1&color2 in
(select color1&color2 from query1)
如果要查找遗漏,可以执行以下操作:
select * from table
where color not in
(select color from query1)
请注意,这仅从表中选择数据。它不执行表和查询1之间的任何联接。
我认为其他人都是正确的。由于每个表中的联接项都有多行,因此您获得了带有联接的奇怪重复项。