0

私は 2 つの同様のテーブルを持っています。1 つは運用中、もう 1 つは進行中です。

Work in Progress から Production に一連のレコードをコピーする必要があります。プロダクションに同様のレコードがすでに存在する場合、コピーできません。

代わりに、一致する行の 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

上記の例では、Work in Progress の基準 ID 41 と 42 が、本番環境の基準 ID 1 と 2 に一致します。

したがって、41 を prod にコピーしようとする前に、それが prod に存在するかどうかを確認するときに、ID 1 が 41 と同じであることを取得する必要があります。

また、進行中の作業の id 442 は 2 と同じではありません。これは、余分な行が 1 つあるためです。値が正確に一致する必要があるだけでなく、カウントも必要です。

SQL クエリで実行しようとしていますが、実行できません。

テーブル全体で一連のレコードを一致させる方法についての指針は役に立ちます。

4

3 に答える 3

1

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)
于 2013-02-20T20:37:38.547 に答える
0

この種の構文は通常、仕事を成し遂げます。

insert into table1
(field1, field2, etc)
from table2
where not exists
(subquery to check for exsiting records)
于 2013-02-20T20:34:49.617 に答える
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} )

さまざまな条件とこの作業についてテストしました。

私を助けてくれたみんなに感謝します。

于 2013-04-09T19:08:19.707 に答える