MS Access连接查询返回的数据超出预期

时间:2018-08-04 09:49:17

标签: sql ms-access-2007

我试图连接两个表,左边的表有7836行,并且我试图返回所有与右边表中的客户地址(大约75000行)结合在一起的行。我正在使用此MS Access SQL查询

SELECT
    ALL_SALES_REFUND.TRANSACTION_EVENT_ID, [Duplicates-removed].[recipient-name], [Duplicates-removed].[ship-address-1], [Duplicates-removed].[ship-address-2], [Duplicates-removed].[ship-address-3], [Duplicates-removed].[ship-city],
    [Duplicates-removed].[ship-state], [Duplicates-removed].[ship-postal-code], [Duplicates-removed].[ship-country]
FROM
    ALL_SALES_REFUND
    LEFT OUTER JOIN [Duplicates-removed] ON ALL_SALES_REFUND.[TRANSACTION_EVENT_ID] = [Duplicates-removed].[order-id];

但是它返回8118行而不是7836行,如何修改它以仅返回7836个原始行?

2 个答案:

答案 0 :(得分:0)

如果此查询返回的记录多于cars中的记录,则显然ALL_SALES_REFUND中存在重复的值。

如果您不希望这样做,则需要在[Duplicates-removed].[order-id]的列上使用GROUP BY ALL_SALES_REFUND.TRANSACTION_EVENT_ID和聚合函数。

如果[Duplicates-removed]ALL_SALES_REFUND.TRANSACTION_EVENT_ID都包含重复项,则无法避免一侧的多个ID与另一侧的多个ID匹配,从而在该过程中创建更多记录。

您将需要找到一个更好的JOIN标准来避免它,或者至少在一侧移除重复项。

答案 1 :(得分:0)

第二个表中需要某种唯一的ID。然后,您可以执行以下操作:

SELECT asr.TRANSACTION_EVENT_ID, dr.[recipient-name], 
       dr.[ship-address-1], dr.[ship-address-2], dr.[ship-address-3], dr.[ship-city],
       dr.[ship-state], dr.[ship-postal-code], dr.[ship-country]
FROM ALL_SALES_REFUND as asr LEFT OUTER JOIN 
     [Duplicates-removed] as dr
     ON asr.[TRANSACTION_EVENT_ID] = dsr.[order-id] 
WHERE dr.[order-id] IS NULL OR
      dr.? = (SELECT MAX(dr2.?)
              FROM [Duplicates-removed] as dr2
              WHERE dr2.[order-id] = dr.[order-id]
             );

?用于指定要获取哪一行的列-可能是id或date列。