union all后distinct 和union
时间: 2023-08-19 15:13:27 浏览: 110
distinct的作用是去除查询结果中的重复记录,而union all则是将多个查询结果合并在一起,不去除重复记录。在使用union all后再使用distinct,相当于先将多个查询结果合并,然后再去除其中的重复记录。这样做的效率相对较低,因为需要对合并后的结果进行排序。而使用exists代替distinct可以避免排序,提高查询效率。所以在多表查询时,建议使用union all代替union,并使用exists代替distinct。[1][2]
举个例子来说明,假设有两个表TABLE_R和TABLE_BAL,它们的结构相同,都包含ACNO、DAT、LOGACNO、SENO和PROVICEID这几个字段。如果我们想要查询这两个表中的所有记录,并去除重复记录,可以使用以下语句:
SELECT DISTINCT * FROM (
SELECT trim(ACNO) as ACNO, DAT, LOGACNO, SENO, PROVICEID FROM TABLE_R
UNION ALL
SELECT trim(ACNO) as ACNO, DAT, LOGACNO, SENO, PROVICEID FROM TABLE_BAL
)
这样的查询会先将两个表的记录合并,然后再去除重复记录。但是这个查询的效率相对较低,因为需要对合并后的结果进行排序。而如果我们使用exists代替distinct,可以提高查询效率:
SELECT * FROM TABLE_R R
WHERE EXISTS (
SELECT 1 FROM TABLE_BAL B
WHERE trim(B.ACNO) = trim(R.ACNO)
AND B.DAT = R.DAT
AND B.LOGACNO = R.LOGACNO
AND B.SENO = R.SENO
AND B.PROVICEID = R.PROVICEID
)
这样的查询不需要进行排序,效率较高。所以在多表查询时,使用exists代替distinct可以提高查询效率。[3]
阅读全文