UPDATE na kilku rekordach

0

Witam społeczność, Jakoś nie mogę sobie poradzić z tematem.
Otóż. Muszę wykonać UPDATE na kilku rekordach, wartościami, które wyciągam z innej tabeli? Da się to jakoś ogarnąć jednym zapytaniem? Uściślając. Wyciągam listę danych (jedno pole), a następnie tą listą chcę uaktualnić odpowiednie pole w innej tabeli w kilku rekordach. Obydwie tabele są ze sobą powiązane. Baza danych SQL Server.

2

Możesz spróbować tak

with d as (
  select * from mytable where id = 1
)
update  mytable2
set     SomeColumn = d.Value,
        SomeColumn2 = d.Value2
where SomeColumnWhere = d.ValueWhere 

Albo pokaż, o co dokładnie ci się rozchodzi, bo może to się da jednym zapytaniem zrobić

0

To po kolei. Dokładnie chodzi o bazę Subiekta GT. Muszę na pozycjach dokumentu w tabeli dok_Pozycja wpisać kody CN, które są w tabeli z towarami tw__Towar. Ale jako, że jest to dokument zbiorczy, to składa się z kilkunastu dokumentów WZ i to dokładnie o to chodzi. Listę pozycji do uzupełnienia, oraz id towarów wyciągam takim zapytaniem:

SELECT ob_Id, ob_TowId FROM dok_Pozycja WHERE ob_TowKodCN = '' AND ob_DokMagId IN (SELECT dok_Id FROM dok__Dokument WHERE dok_DoDokId = (SELECT dok_Id FROM dok__Dokument WHERE dok_NrPelny = 'Nr faktury zbiorczej'));

Kody CN z tabeli tw__Towar dla pozycji powyżej wyciągnąć bym chciał takim zapytaniem:

SELECT tw_KodTowaru FROM tw__Towar WHERE tw_Id IN (Zapytanie powyżej z usuniętym polem ob_Id);

I teraz jak to połączyć razem do kupy z zapytaniem UPDATE??

0

Intelektualnie możesz się zmagać z zagadnieniem jako select z perspektywy tej tabeli (i tego wyboru wierszy), w której będzie finalny update.
jesli opanujesz
select {ta tabela}.pole, {inne}.pole2 join {inne}

i zobaczysz w SQL Studio to, co zamierzasz: pola oryginalne, i przyszłe wartości jakie maja być, ilość wierszy zgodna itd...
to jesteś prawie w domu do update pole = pole2

1
update p set ob_TowKodCN=t.tw_KodTowaru from dok_Pozycja p inner join tw__Towar t on (p.ob_TowId=t.tw_Id) where t.ob_TowKodCN='' and t.ob_DokMagId in (select dok_Id from dok__Dokument where dok_DoDokId in (select dok_Id from dok__Dokument where dok_NrPelny='Nr faktury zbiorczej'))
0
--WERYFIKACJA
SELECT dp.ob_Id, ob_TowId, dp.ob_TowKodCN, tt.tw_KodTowaru 
FROM dok_Pozycja dp
JOIN tw__Towar tt ON tt.tw_id = dp.ob_TowId
WHERE ob_TowKodCN = '' 
	AND ob_DokMagId IN (SELECT dok_Id FROM dok__Dokument WHERE dok_DoDokId = (SELECT dok_Id FROM dok__Dokument WHERE dok_NrPelny = 'Nr faktury zbiorczej'))

--POPRAWA DANYCH
UPDATE dp
SET dp.ob_TowKodCN = tt.tw_KodTowaru 
FROM dok_Pozycja dp
JOIN tw__Towar tt ON tt.tw_id = dp.ob_TowId
WHERE ob_TowKodCN = '' 
	AND ob_DokMagId IN (SELECT dok_Id FROM dok__Dokument WHERE dok_DoDokId = (SELECT dok_Id FROM dok__Dokument WHERE dok_NrPelny = 'Nr faktury zbiorczej'))

Edit: spóźniłem się :)

0

A gdzie tutaj jest UPDATE?????

Fac napisał(a):
--WERYFIKACJA
SELECT dp.ob_Id, ob_TowId, dp.ob_TowKodCN, tt.tw_KodTowaru 
FROM dok_Pozycja dp
JOIN tw__Towar tt ON tt.tw_id = dp.ob_TowId
WHERE ob_TowKodCN = '' 
	AND ob_DokMagId IN (SELECT dok_Id FROM dok__Dokument WHERE dok_DoDokId = (SELECT dok_Id FROM dok__Dokument WHERE dok_NrPelny = 'Nr faktury zbiorczej'))

--POPRAWA DANYCH
SELECT dp.ob_Id, ob_TowId, dp.ob_TowKodCN, tt.tw_KodTowaru 
FROM dok_Pozycja dp
JOIN tw__Towar tt ON tt.tw_id = dp.ob_TowId
WHERE ob_TowKodCN = '' 
	AND ob_DokMagId IN (SELECT dok_Id FROM dok__Dokument WHERE dok_DoDokId = (SELECT dok_Id FROM dok__Dokument WHERE dok_NrPelny = 'Nr faktury zbiorczej'))

Edit: spóźniłem się :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1