【发布时间】:2016-01-17 19:59:51
【问题描述】:
PFB 我的 SQL 查询没有 DISTINCT 或 UNIQUE 关键字,
SELECT CLAIM.CLAIM_ID,
CLAIM.ASSESSMENT_UNIT_ID,
HOUSEHOLD_MEMBER.ASSESSMENT_UNIT_MEM_ID,
PERSON.PERSON_ID
FROM CLAIM,
AWARD,
AWARD_MEMBER,
HOUSEHOLD_MEMBER,
PERSON,
CONDITIONALITY_GROUP
WHERE CLAIM.CLAIM_ID = AWARD.CLAIM_ID
AND AWARD.AWARD_ID = AWARD_MEMBER.AWARD_ID
AND AWARD_MEMBER.HH_MEMBER_ID = HOUSEHOLD_MEMBER.HH_MEMBER_ID
AND HOUSEHOLD_MEMBER.PERSON_ID = PERSON.PERSON_ID
AND HOUSEHOLD_MEMBER.HH_MEMBER_ID = CONDITIONALITY_GROUP.HH_MEMBER_ID;
以下是上述查询的结果
CLAIM_ID ASSESSMENT_UNIT_ID ASSESSMENT_UNIT_MEM_ID PERSON_ID
5000000002 5000000002 1000004 1000004
5000000002 5000000002 1000004 1000004
5000000002 5000000002 1000003 1000003
5000000002 5000000002 1000003 1000003
在独特或独特的帮助下,问题得到了解决,但它影响了查询的性能,所以请告诉我们,如何以另一种方式?
提前感谢您的帮助:)
【问题讨论】:
-
为什么不使用
GROUP BY CLAIM.CLAIM_ID,CLAIM.ASSESSMENT_UNIT_ID,HOUSEHOLD_MEMBER.ASSESSMENT_UNIT_MEM_ID,PERSON.PERSON_ID? -
到
DISTINCT或GROUP BY你经常需要在内部ORDER BY这是一个昂贵的操作。你为什么不弄清楚为什么你的查询给你“重复” - 看起来你根本没有使用CONDITIONALITY_GROUP。如果您改用EXISTS,并且该表导致重复,它将解决您的问题。 -
@Stawros: distinct 和 group by 给了我同样的表现。
-
为什么查询返回原样? 10 次中有 9 次,我打赌你缺少一个连接条件。但是,由于您尚未发布可重现的测试用例,因此除了您之外的任何人基本上都无法确定可能缺少哪个连接条件。
-
请同时发布执行计划。并在问题标题中指定您只需要更快的不同行。你从 Utsav 得到的就是你在标题中所问的。