使用 Distinct 获取重复值

Getting Duplicate Values With Distinct

您好,我正在使用此查询从具有不同参数的相同 table 的数据中减去 table 的值,但我得到了重复的值。谁能看出这里出了什么问题?

SELECT DISTINCT O.BMF_VOTE BMF_VOTE,
       O.BMF_OPERATING_AGENCY BMF_OPERATING_AGENCY,
       O.BGT_ACTUAL_EXPEND - S.BGT_ACTUAL_EXPEND ,
       O.BGT_PREV_ESTIMATE - S.BGT_PREV_ESTIMATE ,
       O.BGT_EST_YEAR1 - S.BGT_EST_YEAR1 ,
       O.BGT_EST_YEAR2 - S.BGT_EST_YEAR2 ,
       O.BGT_EST_YEAR3 - S.BGT_EST_YEAR3 
  FROM BGT_MOF_FROM O, BGT_MOF_FROM S
 WHERE (O.BMF_MAINDIVISION = '100' AND O.BMF_SUBDIVISION = '300')
       AND (S.BMF_SUBDIVISION = '220' AND S.BMF_MAINDIVISION = '100')

在我看来,您似乎缺少两个表的任何连接子句,不知道数据应该类似于:

FROM BGT_MOF_FROM O, BGT_MOF_FROM S
WHERE O.key = S.key

显然用实际的列名替换键。如果你想做一个半笛卡尔积(又慢又坏),你应该把查询包装成一个子查询,然后 运行 在它上面一个不同的。

表中没有连接;这可能就是骗子的来源。一个更清晰的表达你想要什么的方法是使用子选择(下面别名为 O 和 S),加入 BMF_VOTE 和 BMF_OPERATING_AGENCY:

SELECT 
   O.BMF_VOTE, O.BMF_OPERATING_AGENCY,
   O.BGT_ACTUAL_EXPEND - S.BGT_ACTUAL_EXPEND ,
   O.BGT_PREV_ESTIMATE - S.BGT_PREV_ESTIMATE ,
   O.BGT_EST_YEAR1 - S.BGT_EST_YEAR1 ,
   O.BGT_EST_YEAR2 - S.BGT_EST_YEAR2 ,
   O.BGT_EST_YEAR3 - S.BGT_EST_YEAR3 
FROM 
  (
   SELECT * FROM BGT_MOF_FROM
   WHERE BMF_MAINDIVISION = '100' AND 
         BMF_SUBDIVISION = '300'
   ) O
  JOIN 
  (SELECT * FROM BGT_MOF_FROM
   WHERE BMF_SUBDIVISION = '220' AND 
         BMF_MAINDIVISION = '100' 
   ) S
   on 
   O.BMF_VOTE = S.BMF_VOTE and
   O.BMF_OPERATING_AGENCY =  S.BMF_OPERATING_AGENCY

修复您的代码:

SELECT DISTINCT O.BMF_VOTE BMF_VOTE,
   O.BMF_OPERATING_AGENCY BMF_OPERATING_AGENCY,
   O.BGT_ACTUAL_EXPEND - S.BGT_ACTUAL_EXPEND ,
   O.BGT_PREV_ESTIMATE - S.BGT_PREV_ESTIMATE ,
   O.BGT_EST_YEAR1 - S.BGT_EST_YEAR1 ,
   O.BGT_EST_YEAR2 - S.BGT_EST_YEAR2 ,
   O.BGT_EST_YEAR3 - S.BGT_EST_YEAR3 
FROM BGT_MOF_FROM O, BGT_MOF_FROM S
WHERE 
   (O.BMF_VOTE = S.BMF_VOTE and O.BMF_OPERATING_AGENCY =  S.BMF_OPERATING_AGENCY) 
   AND 
   (O.BMF_MAINDIVISION = '100' AND O.BMF_SUBDIVISION = '300')
   AND 
   (S.BMF_SUBDIVISION = '220' AND S.BMF_MAINDIVISION = '100')