[mysql] zapytanie uaktualnienie id tabeli
maLy - 25-01-2006 12:10
[mysql] zapytanie uaktualnienie id tabeli
Mam tabele: nazwy: -id -nazwa
sprzedaz: -id -model (nazwy.id)
nazwy2: -id -nazwa
sprzedaz2: -id -model (nazwy2.id)
W rzeczywistosci baz: nazwy i sprzedaz jest wiecej. Chce teraz wszystkie polaczyc w dwie: wszystkie_nazwy: -id -nazwa -wlasciciel
wszystkie_sprzedaz: -id -model (wszystkie_sprzedaz.id) -wlasciciel
Jakie dac zapytanie, zeby (po przekopiowaniu tabel: nazwa i sprzedaz do wszystkie_nazwa, wszystkie_sprzedaz) po zmianie nazwa.id na wszystkie_nazwa.id zaktualizowac wszystkie_sprzedaz.model wg nowego id. Probowalem jak ponizej, ale 0 wynikow: UPDATE nazwy, wszystkie_nazwy, wszystkie_sprzedaz SET wszystkie_sprzedaz.model = wszystkie_nazwy.id WHERE nazwy.nazwa = wszystkie_nazwy.nazwa AND wszystkie_sprzedaz.model = nazwy.id AND wszystkie_sprzedaz.wlasciciel = 1
POMOCY! -- maLy http://kalamazoo.pl
trojacek.NOSPAM@wp.pl - 25-01-2006 12:10
On Tue, 24 Jan 2006 14:29:30 +0100, maLy <malyem@o2.pl> wrote:
>Probowalem jak ponizej, ale 0 wynikow: >UPDATE nazwy, wszystkie_nazwy, wszystkie_sprzedaz SET >wszystkie_sprzedaz.model = wszystkie_nazwy.id >WHERE >nazwy.nazwa = wszystkie_nazwy.nazwa AND >wszystkie_sprzedaz.model = nazwy.id AND >wszystkie_sprzedaz.wlasciciel = 1
UPDATE??? Chyba INSERT? Chyba, że w tabelach wszystkie_nazwy i wszystkie_sprzedaz masz już coś wpisane... UPDATE nie wstawia żadnych rekordów.
Spróbuj składni INSERT .... VALUES() ... SELECT ...
-- Jacek Trojański, trojacek(at)wp(dot)pl
maLy - 25-01-2006 12:10
trojacek.NOSPAM@wp.pl napisał(a):
> UPDATE??? Chyba INSERT? Chyba, że w tabelach wszystkie_nazwy i > wszystkie_sprzedaz masz już coś wpisane... Chce zrobic to na raty, czyli po kolei dodawac nowa tabele (to potrafie), ale nie moge poradzic sobie ze zmiana id.
-- maLy http://kalamazoo.pl
trojacek.NOSPAM@wp.pl - 25-01-2006 12:10
On Tue, 24 Jan 2006 15:41:56 +0100, maLy <malyem@o2.pl> wrote:
>trojacek.NOSPAM@wp.pl napisał(a): > >> UPDATE??? Chyba INSERT? Chyba, że w tabelach wszystkie_nazwy i >> wszystkie_sprzedaz masz już coś wpisane... >Chce zrobic to na raty, czyli po kolei dodawac nowa tabele (to >potrafie), ale nie moge poradzic sobie ze zmiana id.
To opisz, JAK dodajesz tę tabelę, a raczej jak wypełniasz ją danymi. Ktoś Ci na pewno pomoże :)
-- Jacek Trojański, trojacek(at)wp(dot)pl
maLy - 25-01-2006 12:10
trojacek.NOSPAM@wp.pl napisał(a):
> To opisz, JAK dodajesz tę tabelę, a raczej jak wypełniasz ją danymi. > Ktoś Ci na pewno pomoże :) wczesniej: nazwy: -id -nazwa 1 aaa 2 bbb 3 ccc
sprzedaz: -id -model (nazwy.id) 1 1 2 3 3 3 4 2
nazwy2 (ta sama struktura co nazwa): 1 bbb 2 xxx 3 zzz
sprzedaz2(jw): 1 2 2 3 3 1
....itd
teraz otrzymalem po kopiowaniu: wszystkie_nazwy: -id -nazwa -wlasciciel (dla uproszczenia jesli nazwy2 to 2, nazwy3 to 3 itd...)
1 aaa 1 2 bbb 1 3 ccc 1 4 bbb 2 5 xxx 2 6 zzz 2
wszystkie_sprzedaz: -id -model (wszystkie_nazwy.id) -wlasciciel (jw)
1 1 1 2 3 1 3 3 1 4 2 1 5 2 2 6 3 2 7 1 2
Ta tabela jest do poprawy, w przedstawiony wyzej sposob, to jest to co otrzymuje przez kopiowanie starych tabel do jednej wspolnej. Jak teraz przywrocic poprawnosc tabeli zebym otrzymal: 1 1 1 2 3 1 3 3 1 4 2 1 5 5 2 6 5 2 7 4 2
Wtedy moglbym zrezygnowac z pola wszystkie_nazwy.wlasciciel.
-- maLy http://kalamazoo.pl
trojacek.NOSPAM@wp.pl - 25-01-2006 12:10
On Tue, 24 Jan 2006 16:39:13 +0100, maLy <malyem@o2.pl> wrote:
>Ta tabela jest do poprawy, w przedstawiony wyzej sposob, to jest to co >otrzymuje przez kopiowanie starych tabel do jednej wspolnej. Jak teraz >przywrocic poprawnosc tabeli zebym otrzymal: >1 1 1 >2 3 1 >3 3 1 >4 2 1 >5 5 2 >6 5 2 >7 4 2
W takim razie Twoje query:
>UPDATE nazwy, wszystkie_nazwy, wszystkie_sprzedaz SET >wszystkie_sprzedaz.model = wszystkie_nazwy.id >WHERE >nazwy.nazwa = wszystkie_nazwy.nazwa AND >wszystkie_sprzedaz.model = nazwy.id AND >wszystkie_sprzedaz.wlasciciel = 1
jest lekko kolizyjne, bo zarówno zapisujesz, jak i sprawdzasz kolumnę wszystkie_sprzedaz.model, nie wiesz więc, kiedy jest tam stara wartość(model), a kiedy nowa (id). Najlepiej stwórz tymczasową tabelę i do niej INSERTuj, potem ją możesz przenieść/przemianować.
-- Jacek Trojański, trojacek(at)wp(dot)pl
maLy - 25-01-2006 13:32
trojacek.NOSPAM@wp.pl napisał(a): > Najlepiej stwórz tymczasową tabelę i do niej INSERTuj, potem ją możesz > przenieść/przemianować. dalem tak: UPDATE nazwy, wszystkie_nazwy, wszystkie_sprzedaz, wszystkie_sprzedaz_temp SET wszystkie_sprzedaz.model = wszystkie_nazwy.id WHERE nazwy.nazwa = wszystkie_nazwy.nazwa AND wszystkie_sprzedaz_temp.model = nazwy.id AND wszystkie_sprzedaz.wlasciciel = 1 AND wszystkie_sprzedaz.id=wszystkie_sprzedaz_temp.id
i dalej zero :( Dzieki za pomoc. -- maLy http://kalamazoo.pl
Kasia Balicka - 27-01-2006 10:46
> trojacek.NOSPAM@wp.pl napisał(a): > > Najlepiej stwórz tymczasową tabelę i do niej INSERTuj, > potem ją możesz > > przenieść/przemianować. > dalem tak: > UPDATE nazwy, wszystkie_nazwy, wszystkie_sprzedaz, > wszystkie_sprzedaz_temp SET > wszystkie_sprzedaz.model = wszystkie_nazwy.id > WHERE > nazwy.nazwa = wszystkie_nazwy.nazwa AND > wszystkie_sprzedaz_temp.model = nazwy.id AND > wszystkie_sprzedaz.wlasciciel = 1 AND > wszystkie_sprzedaz.id=wszystkie_sprzedaz_temp.id > > i dalej zero :( > Dzieki za pomoc. > -- > maLy > http://kalamazoo.pl
przyjrzalam sie temu co robiles i wydaje mi sie ze chodzi ci o zachowanie relacji w polaczonej tabeli pomimo tego iz w tabelach rozdzielnych powtarzaja sie id.. Ja obeszłabym to trikiem jezeli nie musi to byc operacja powtarzalna. zakladam ze id numerowane jest od 1. nalezy w jednej z tabel nazwa sprawdzic jakie jest max(id) i nastepnie w drugiem importowanej tabeli dodawac te wartosc do kazdego id to samo zrobic w drugiej tabeli sprzedazy. Mozna by to juz wykonac przy poleceniu insert w ten sposob pierwszy insert robisz normalnie
insert wszystkie_nazwy(id, nazwa) select (id, nazwa) from nazwy
insert wszystkie_sprzedaz ( id, model) select (id, model) from sprzedaz
-- a kolejna tabele insertujesz insert wszystkie_nazwy(id, nazwa) select id + (tu max(id) from nazwy) from nazwy2
insert wszystkie_sprzedaz(id,model) select id, model +(tu max(id) from nazwy) from sprzedaz2
--oczywiscie sprawa ma sie tak samo z id sprzedazy gdyby mialo byc niepowtarzalne i zahcowac jakies relacje... Kasia
-- Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[MySQL] Czy da =?ISO-8859-2?Q?si=EA_wykonac_takie_powi=B1z?==?ISO-8859-2?Q?anie_mi=EAdzy_tabelami=2C_i_jak_to_odpyta=E6_? ==?ISO-8859-2?Q?=3F?=
Import za =?ISO-8859-2?Q?pomoc=B1_EMS_Data_Import_for_?==?ISO-8859-2?Q?MySQL_-_polskie_litery=2E?=
oracle -> oracle lub oracle -> mysql replikacja - programy
zanotowane.pldoc.pisz.plpdf.pisz.plptsite.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|