SQL Server 2008: обновление столбца на основе других таблиц - PullRequest
0 голосов
/ 06 марта 2012

Таблица A (id int, match char(15), multiple char(10))

int match multiple
1   100  
2   101
3   102
4   103

Таблица B (match char(15), match2 char(10))

match  match2
100    ABC
100    NBG
101    NYF
102    NHW
102    UYQ
103    WOT

Теперь я хочу заполнить TableA.multiple = "YES", если в TableB для соответствующего совпадения существует более одного совпадения2.

Ожидаемый результат.

int match multiple
1   100    YES
2   101    NULL
3   102    YES
4   103    NULL

Заранее спасибо!

Моя неудачная попытка:

Update A 
SET multiple = 'YES' 
From tableA A
Inner join tableB B ON A.match = B.match
WHERE (Select count(distinct(B.match2)) from TableB) > 2

Ответы [ 3 ]

4 голосов
/ 06 марта 2012

Начните с очень подробной версии, просто для ясности:

UPDATE TableA
SET multiple = 'YES'
WHERE match in (
    -- isolate the multiples
    SELECT match from (
        -- count the matches
        SELECT count(*) as c, match from TableB
        GROUP BY match ) x
    WHERE c > 1
)

С помощью предложения HAVING вы можете изменить это ...

    SELECT match from (
        SELECT count(*) as c, match from TableB
        GROUP BY match ) x
    WHERE c > 1

... наэто:

   SELECT match from TableB
   GROUP BY match
   HAVING count(*) > 1

Итак, теперь у нас есть:

UPDATE TableA
SET multiple = 'YES'
WHERE match in (
   SELECT match from TableB
   GROUP BY match
   HAVING count(*) > 1
)

Я уверен, что это можно сделать более компактным, но меня лично смущают UPDATE утверждения, содержащие неочевидныеJOIN предложения, особенно среди ночи, когда мне звонят, что «база данных не работает!»

Не заставляй меня думать относится и к кодированию.

0 голосов
/ 06 марта 2012
UPDATE tableA
SET multiple = 'YES'
FROM TableA AS a
JOIN (SELECT match FROM tableB GROUP BY match HAVING COUNT(*) > 1) AS b ON a.match = b.match
0 голосов
/ 06 марта 2012
UPDATE TableA a
SET multiple='YES'
FROM Tablea a,(SELECT match FROM Tableb GROUP BY match HAVING COUNT(*)>1)b
WHERE a.match=b.match
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...