2011-09-12 8 views
-1

TableA의SQL : 다른 테이블

ID MatchID1 MatchID2 
1 1002 120 
3 1003 141 
5 1006 150 
6 1008 140 

TableB의 기반으로 열을 업데이트

ID MatchID1 MatchID2 Status 
1 1002  120 
2 1002  120 
3 1002  120 
4 1003  200 
5 1006  150 
6 1008  150 
7 1008  140 
내가 'FAIL'로 TableB의의 COL = 상태를 채우려

경우 : TableB의로부터 MatchID1에 대한 ALL matchID2 tableA에 해당 MAatchID1에 대한 matchID2와 동일하지 않습니다. 이 경우 tableB : 120은 1002에 해당하며 tableA에도 동일하므로 실패하지 않습니다. 예상 결과 :

ID MatchID1 MatchID2 Status 
    1 1002  120 NULL 
    2 1002  120 NULL 
    3 1002  120 NULL 
    4 1003  200 FAIL 
    5 1006  150 NULL 
    6 1008  150 FAIL 
    7 1008  140 FAIL 

참고 : 일치하지 않는 레코드 (match02) 한 경우에도 match01에 대한 전체 집합을 실패합니다. ID 6 & 7을 좋아한다. 미리 감사드립니다.

+0

당신은 당신이 한 절차와 함께 할 수있는 오라클을 사용하는 경우. SQL만으로도 당신이 할 수 있다는 것을 확신 할 수 없습니다. –

답변

1
UPDATE a 
SET Status = 'FAIL' 
FROM TableA a 
    INNER JOIN (
    SELECT a.MatchID1 
    FROM TableA a 
     INNER JOIN b ON a.MatchID1 = b.MatchID1 AND a.MatchID2 <> b.MatchID2 
    GROUP BY a.MatchID1 
) x ON a.MatchID1 = x.MatchID1 
0

당신은 조인을 통해 업데이트를 찾고 있다고 생각합니다. 이 시도;

UPDATE TableB 
SET TableB.Status = CASE WHEN TableA.ID IS NULL THEN 'FAIL' ELSE NULL END 
FROM TableB 
LEFT JOIN TableA 
ON TableB.MatchID1 = TableA.MatchID1 
    AND TableB.MatchID2 = TableA.MatchID2 

사용중인 RDBMS를 말하지 않았습니다. 위의 내용은 SQL Server에 대한 것입니다. .. 아직도 당신이 무엇을 요구 모르는

0

다시 읽고 ...

작은 덩어리로 당신의 노력을 분해 좋습니다.

  1. 작은 쿼리를 수행하거나 다른 일치하는 번호가없는 첫 번째 테이블에서 불과 행을 얻을 :

    는 당신이 몇 가지 필요한 것 같다. 그것을 써라.

  2. 두 번째 테이블의 일치 번호가 첫 번째 테이블에서 발견되는지 찾기위한 작은 쿼리입니다. 그것을 써라.

  3. 처음 두 쿼리를 기반으로 값을 설정하는 업데이트.

HTH

1
update B 
    set status = 'FAIL' 
    From tableB B 
    INNER JOIN (SELECT B.matchID1 FROM TableB B 
       GROUP BY B.matchID1 
       HAVING MAX(matchID1)<> MIN(MatchID2)) B1 
    ON B.matchid1 = B1.MatchID1 

UPDATE B 
SET Status = 'FAIL' 
FROM TableB B 
    INNER JOIN TableA A 
    ON A.MatchID1 = B.matchID1 
WHERE A.matchID2 <> B.matchID2