2013-02-20 51 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 

在上述示例中的標準ID 41和42與生產中的標準ID 1 & 2匹配。

所以,在我試圖複製41督促,當我檢查它是否存在於督促,我需要獲得ID 1相同,41

此外,在工作中的ID 442進展與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 2013-04-09 19:01:30

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)