2013-02-20 3 views
0

프로덕션에는 두 개의 유사한 테이블이 있고 진행중인 작업에는 다른 테이블이 있습니다.행 집합이 프로덕션에 존재하는지 확인하십시오.

진행중인 작업에서 프로덕션으로 레코드 집합을 복사해야합니다. 프로덕션에 이미 비슷한 레코드 세트가 있다면 복사 할 수 없습니다.

대신 일치하는 행의 ID를 가져와야합니다.

그래서 먼저 복사를 시도하기 전에 유사한 레코드 집합이 제작 중인지 확인합니다. 여기

가 진행 테이블에서 작업의 예를 생산 테이블

기준

CriteriaId CriteriaVal CriteriaText 

1    42    SAM 

1    43    Guess 

2    324    Sale 

2    432    Jones 

2    423    Patrick 

2    4322    Tiffany 

기준이다

CriteriaId CriteriaVal CriteriaText 

41    42    SAM 

41    43    Guess 

42    324    Sale 

42    432    Jones 

42    423    Patrick 

42    4322    Tiffany 

43    42    SAM 

442    324    Sale 

442    432    Jones 

442    423    Patrick 

442    4322    Tiffany 

442    3432    SAM 

,536,

위의 예에서 진행중인 작업의 ID 41 및 42는 조건 ID 1 & 2와 일치합니다. 내가 그 자극에 존재하는지 여부를 검사 할 때, 자극하는 41 복사하기 전에 진행이에

그래서, 나는 또한 41

, 직장에서 ID를 442로 ID 1은 동일 얻을 필요 하나 더 여분의 행을 가지고 있기 때문에 2와 같지 않습니다. 가치가 정확히 일치해야 할뿐만 아니라 계산이 필요합니다.

SQL 쿼리를 수행하려하지만이를 수행 할 수 없습니다.

테이블간에 레코드 세트를 일치시키는 방법에 대한 지침은 도움이 될 것입니다.

답변

0

내가이 문제를 해결하는 데 사용되는 쿼리입니다.

 SELECT CriteriaId FROM CRITERIA JBCRV1, (
      SELECT DISTINCT JBCRV2.CriteriaId AS CRITERIAID 
      FROM WIPCRITERIA JWBCRV1 
      INNER JOIN CRITERIA JBCRV2 
       ON JWBCRV1.CriteriaVal= JBCRV2.CriteriaVal 
       AND JWBCRV1.CriteriaText = JBCRV2.CriteriaText 
      WHERE JWBCRV1.CriteriaId = #{CriteriaId} 
      GROUP BY JBCRV2.CriteriaId HAVING COUNT(1) = 
       (SELECT COUNT(1) 
       FROM WIPCRITERIA 
       WHERE CriteriaId = #{CriteriaId}) 
     ) RESULT_TABLE 
     WHERE JBCRV1.CriteriaId = RESULT_TABLE.CRITERIAID 
     GROUP BY JBCRV1.BEN_CRTR_ID HAVING COUNT(1) = 
       (SELECT COUNT(1) 
       FROM WIPCRITERIA 
       WHERE CriteriaId = #{CriteriaId}) 

나는이 작업을 다양한 조건으로 테스트했습니다. &

나를 도우 려던 모든 분들께 감사드립니다.

0

이러한 종류의 구문은 일반적으로 작업을 완료합니다.

insert into table1 
(field1, field2, etc) 
from table2 
where not exists 
(subquery to check for exsiting records) 
+0

다음은이 문제를 해결하는 데 사용한 쿼리입니다. – RVishnu

1

한 가지 전략 (나중에 SQL2005과) :

select a,b,c from InProgress 
EXCEPT 
select a,b,c from Production 

또는 : 여기

select a,b,c, min(criteriaID), max(criteriaID) 
from (
    SELECT criteriaID, a,b,c from InProgress 
    UNION ALL 
    SELECT criteriaID, a,b,c from Production 
) t group by a,b,c having min(criteriaID) <> max(criteriaID) 
관련 문제