2012-03-05 3 views
0

TableA (id int, match char(15), multiple char(10))SQL Server 2008: Обновление столбца на основе других таблиц

int match multiple 
1 100 
2 101 
3 102 
4 103 

TableB (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 

Заранее благодарен!

Моя FAILED попытка:

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 
+0

101,103 имеют право на матч? – Teja

ответ

4

Начать с очень многословной версии, только для своей ясности:

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 статьи, особенно в середине ночи, когда я получаю звонок, что «база данных не работает!»

Don't Make Me Think также относится к кодированию.

+0

выберите счет (отличный (*)) как c .... где c> 1 –

+0

Этот код работает. БЛАГОДАРЯ !! –

+0

Исправлена ​​ошибка '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – egrunin

-3
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 
+0

Мне нужно заполнить YES, если в таблице есть более 1 (match2) записей для такого же совпадения. –

+0

Это не будет работать, поскольку число не учитывается. – JonH

+0

@BhupinderSingh Проверьте этот. – Teja

0
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

Эта идея хороша, но во многих ситуациях она будет работать медленно. –

Смежные вопросы