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

在上面的示例中,Work in Progress 中的标准 id 41 和 42 与生产中的标准 id 1 和 2 匹配。

所以,在我尝试将 41 复制到 prod 之前,当我检查它是否存在于 prod 中时,我需要获取 id 1 与 41 相同。

此外,Work in progress 中的 id 442 与 2 不同,因为它有一个额外的行。我需要计数以及值应该完全匹配。

我正在尝试在 SQL 查询中执行此操作,但我无法执行此操作。

有关如何跨表匹配一组记录的任何指示都会有所帮助。

4

3 回答 3

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 回答