SQL: обновление столбца на основе другой таблицы - PullRequest
0 голосов
/ 13 сентября 2011

TableA

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

Я хочу заполнить TableB col = status 'FAIL', если: ВСЕ matchID2 для его MatchID1 из таблицы B не равно matchID2 для его соответствующего MAatchID1 в таблице A В этом случае 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 в таблице B. Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 13 сентября 2011
   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
1 голос
/ 13 сентября 2011
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 голосов
/ 13 сентября 2011

перечитываете ... до сих пор не знаю, что вы спросили ...

предложите разбить ваши усилия на более мелкие куски.

кажется, вам нужно несколько вещей:

  1. небольшой запрос, чтобы получить только строки из первой таблицы, которые имеют или не имеют разные номера совпадений. напиши это.

  2. небольшой запрос, чтобы найти, найдены ли совпадения из второй таблицы в первой таблице. напиши это.

  3. обновление, устанавливающее значения на основе первых двух запросов.

НТН

0 голосов
/ 13 сентября 2011

Я думаю, что вы ищете обновление через объединение. Попробуйте это;

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 

Вы не сказали, какую СУБД вы используете, выше для SQL Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...