[SQL]Podmiana rekordów o różnym ID w tej samej tabeli


(Grzegorz Pyzera) #1

Sytuacja wygląda następująco:

Powiedzmy, że są 3 kolumny: ID_Ceny, Towar, Cena.

Tabela wygląda mniej więcej następująco

1, 1, 20

2, 1, 17

3, 1, 18

1, 2, 8

2, 2, 16

3, 2, 7

Chodzi mi o to, żeby w towarze 1 zmieniła się cena 17 na 20, w towarze 2 zmieniła się cena z 16 na 8 itd itp. Pobranie z ID 1 i wrzucenie do ID 2.

Kombinuję ze stworzeniem tymczasowej tabeli (tmp.tabela) z wynikami tylko ID = 1 i pobranie z niej rekordów ale zapytanie:

UPDATE tabela SET Cena = (SELECT tmp_cena FROM tmp.tabela WHERE tmp.towar=towar) WHERE ID_Ceny = 2

wypluwa mi błąd, że wyników jest więcej niż jeden i koniec.. no ale do diaska o to mi chodzi, żeby wyników było więcej.. Jaki myk się stosuje w takich wypadkach bo jakoś dzisiaj google nie chcą ze mną współpracować?


(Latos 89) #2

tabela_testowa jest identyczna do tabela_testowa2

select * into temp tabela_testowa from(

select 1 as id_cena, 1 as towar, 20 as cena

union all

select 2, 1, 17

union all

select 3, 1, 18

union all

select 1, 2, 8

union all

select 2, 2, 16

union all

select 3, 2, 7

) as x

update tabela_testowa set cena=(select a.cena from tabela_testowa2 a where a.id_cena=1 and a.towar=tabela_testowa.towar)

where id_cena=2


(Tomek Matz) #3

W Twoim przypadku potrzebne jest tzw. podzapytanie skorelowane:

UPDATE tabela SET tabela.Cena = (

	SELECT temp.Cena

	FROM tabela AS temp

	WHERE tabela.Towar = temp.Towar and temp.ID_Ceny = 1 

)

WHERE tabela.ID_Ceny = 2

(Grzegorz Pyzera) #4

Bożesztymój! Dzięki chłopaki! Próbowałem już tego.. tylko, że cały czas podawałem inne ID a potem w tabeli patrzyłem na inne #-o Dość pracy na dzisiaj chyba..