我试图连接两个表,左边的表有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个原始行?
答案 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列。