2010-01-28 14 views
7

Wieczorem wszystko,Aktualizacja tabeli a z tabeli b gdzie (warunki)

Właściwie to już noc. Około 23.00. Mój mózg się wyłącza i potrzebuję trochę pomocy, abym mógł dokończyć i wrócić do domu :)

Mam dwa stoły - stół ai stół b. Muszę zaktualizować pole w tabeli a wartością z pola w tabeli b, gdy dwa inne pola są zgodne. Tabele nie mają unikatowy identyfikator dla każdego rekordu :(

Zasadniczo, chcę to zrobić:

update a 
set importantField = 
(select b.importantfield 
from b 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 
) 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 

Albo przynajmniej ... myślę, że to, co chcę robić ...

Czy ktoś może mi pomóc, proszę

Odpowiedz

11

można to zrobić poprzez sprzężenie w aktualizacji:

Update a 
Set a.importantField = b.importantField 
From a Join b 
    On a.matchfield = b.matchfield 
    And a.matchfield2 = b.matchfield2 
+1

Ty, Sir, jesteś geniuszem. ... i naprawdę jestem zmęczony, aby nie myśleć o dołączeniu ... Mogę teraz iść do domu i to wszystko dzięki Wam! Daj sobie klepnąć w plecy: D –

+0

@Cosmic: Cieszę się, że to działa dla ciebie ... Musiałem dwukrotnie sprawdzić, czy zadziałało, spędziłem zbyt dużo czasu w LINQ ostatnio :) –

+0

Myślę, że musisz ustawić alias dla 'a stolik, żeby to zadziałało, czy coś mi brakuje? –

3

użytkowania :

UPDATE TABLE_A 
    SET importantField = (SELECT b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

SQL Server nie obsługuje aliasów tabel na stole jest aktualizowany, ale wyżej jest skorelowana zapytania - te pola bez aliasu tabeli b załączonym posłuży wartości od TABLE_A ponieważ nie ma Alias.

Jedynym problemem jest to, że istnieje wiele wartości b.importantfield dla rekordów z pasującymi rekordami do TABLE_A. Zastosowanie:

UPDATE TABLE_A 
    SET importantField = (SELECT TOP 1 
           b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

..ale należy użyć ORDER BY jak dobrze albo dostaniesz żadnej losową wartość b.importantfield.

+0

Dziękuję bardzo za poświęcenie czasu, aby napisać do mnie odpowiedź. W końcu nie skorzystałem z twojego rozwiązania, ale i tak chcę ci za to podziękować. Więc dziękuję :) –

Powiązane problemy