SQL中的内部联接查询时防止重复记录



我使用内部联接命令从两个表中获取数据。但是,当我运行SQL查询时。

我把同一张唱片复制了48次。

我创建的SQL查询在下面

SELECT 
ABS_LIMIT.B1_NAME, ABS_LIMIT.B2_NAME, ABS_LIMIT.B3_NAME, ABS_LIMIT.ELEM_NAME 
FROM 
ABS_LIMIT
INNER JOIN 
RTU_SCAN ON RTU+SCAN.B1_NAME = ABS_LIMIT.B1_NAME
WHERE 
ABS_LIMIT.B3_NAME LIKE 'AMP%';

有人知道如何从查询结果中删除重复项吗?

您从不从RTU_SCANSELECT任何列,因此您可以使用EXISTS而不是INNER JOIN:

SELECT a.B1_NAME, 
a.B2_NAME,
a.B3_NAME,
a.ELEM_NAME 
FROM   ABS_LIMIT a
WHERE  EXISTS (SELECT 1 FROM RTU_SCAN r WHERE r.B1_NAME = a.B1_NAME)
AND    a.B3_NAME LIKE 'AMP%';

然后,如果RTU_SCAN中有重复的行,它们将不会在输出中传播重复的行。


或者,您可以使用DISTINCT来删除重复项:

SELECT DISTINCT
a.B1_NAME, 
a.B2_NAME,
a.B3_NAME,
a.ELEM_NAME 
FROM   ABS_LIMIT a
INNER JOIN RTU_SCAN r
ON r.B1_NAME = a.B1_NAME
AND    a.B3_NAME LIKE 'AMP%';

然而,与使用EXISTS而不首先生成重复项相比,使用DISTINCT生成重复项并过滤掉它们可能效率较低。

最新更新