[mysql] update podobnie jak insert-select?
Piotr - 11-11-2005 11:41
[mysql] update podobnie jak insert-select?
nie mogę się doszukać w manualu: czy jest podobna funkcja do insert-select ale z update?
chodzi o polecenie:
wybierz wiersz o id=2345 i wklej go na rekordy o numerach 12314, 123412, 234523,....
(takie pokrycie jednym rekordem innych wybranych)
Piotr - 11-11-2005 11:41
Piotr napisał(a):
> (takie pokrycie jednym rekordem innych wybranych)
Dodam tylko żeby było śmieszniej, nie wszystkie kolumny wiersza mają być nadpisywane. Da się to w ogóle zrobić jednym zapytaniem?
Proton - 11-11-2005 11:41
Użytkownik "Piotr" <piotr@bez.maila> napisał w wiadomości news:dkr99j$6mo$1@atlantis.news.tpi.pl... > Piotr napisał(a): > >> (takie pokrycie jednym rekordem innych wybranych) > > Dodam tylko żeby było śmieszniej, nie wszystkie kolumny wiersza mają być > nadpisywane. Da się to w ogóle zrobić jednym zapytaniem?
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] poczytaj o tym w manualu--pozdroProton
Piotr - 11-11-2005 11:41
Proton napisał(a):
> INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] > [INTO] tbl_name [(col_name,...)] > SELECT ... > [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] > poczytaj o tym w manualu--pozdroProton
no to znam, ale przecież to jest insert a ja pytam o update. poszczególne pola danego rekordu mają sie skopiować na wybrane już istniejące wiersze
Artur Muszynski - 11-11-2005 11:41
"Piotr" <piotr@bez.maila> wrote in message news:dksf0k$kmv$1@nemesis.news.tpi.pl... > Proton napisał(a): > >> INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] >> [INTO] tbl_name [(col_name,...)] >> SELECT ... >> [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] >> poczytaj o tym w manualu--pozdroProton > > no to znam, ale przecież to jest insert a ja pytam o update. > poszczególne pola danego rekordu mają sie skopiować na wybrane już > istniejące wiersze
Poczytaj w manualu o multiple update, powinno pomóc. Przykład z manuala:
UPDATE items,month SET items.price=month.price WHERE items.id=month.id; artur
Piotr - 11-11-2005 11:41
Artur Muszynski napisał(a):
> Poczytaj w manualu o multiple update, powinno pomóc. Przykład z manuala: > > UPDATE items,month SET items.price=month.price > WHERE items.id=month.id;
no tak, ale jak zapisać pierwszy warunek WHERE dla tabela_2?
bo opisowo ma być tak:
z tabela_1 wybierz kolumna_1, kolumna_3 wiersza o id=2345 potem wklej do tabela_2 wybrane pola kolumna_1, kolumna_3 na kolumny o tych samych nazwach w rekordach o numerach 12314, 123412, 234523,....
przy kopiowaniu do tabela_2 nowych rekordów nie ma problemu, zapis byłby mniej więcej taki:
INSERT INTO tabela_2 (kolumna_1, kolumna_2) SELECT kolumna_1, kolumna_2 FROM tabela_1 WHERE Id = 2345
a UPDATE? w tabela_2 musi być jakiś warunek z SELECTEM i WHERE Id IN (12314, 123412, 234523) ale jak to zapisać?
to w ogóle możliwe?
Proton - 11-11-2005 11:41
Użytkownik "Piotr" <piotr@bez.maila> napisał w wiadomości news:dkss1g$2ib$1@atlantis.news.tpi.pl... > Artur Muszynski napisał(a): > > >> Poczytaj w manualu o multiple update, powinno pomóc. Przykład z manuala: >> >> UPDATE items,month SET items.price=month.price >> WHERE items.id=month.id; > > no tak, ale jak zapisać pierwszy warunek WHERE dla tabela_2? > > bo opisowo ma być tak: > > z tabela_1 wybierz kolumna_1, kolumna_3 wiersza o id=2345 > potem wklej do tabela_2 wybrane pola kolumna_1, kolumna_3 na kolumny o > tych samych nazwach w rekordach o numerach 12314, 123412, 234523,.... > > przy kopiowaniu do tabela_2 nowych rekordów nie ma problemu, zapis byłby > mniej więcej taki: > > INSERT INTO tabela_2 (kolumna_1, kolumna_2) > SELECT kolumna_1, kolumna_2 > FROM tabela_1 WHERE Id = 2345 > > a UPDATE? w tabela_2 musi być jakiś warunek z SELECTEM i WHERE Id IN > (12314, 123412, 234523) ale jak to zapisać?
A moze po prostu UPDATE tabela_2 SET kolumna_1 = (SELECT kolumna_1 FROM tabela_1 WHERE id=2345), kolumna_2 = (SELECT kolumna_2 FROM tabela_1 WHERE id=2345) WHERE id IN (12314, 123412, ...)
toporne ale powinno zadzialac Jak przypomne sobie cos lepszego do dam znac ;-) -- pozdro Proton
Piotr - 11-11-2005 11:41
Proton napisał(a):
> A moze po prostu > UPDATE tabela_2 > SET > kolumna_1 = (SELECT kolumna_1 FROM tabela_1 WHERE id=2345), > kolumna_2 = (SELECT kolumna_2 FROM tabela_1 WHERE id=2345) > WHERE id IN (12314, 123412, ...)
też wyjście :) na razie załatwiłem to dwoma zapytaniami... ale nadal ciekawi mnie czy da się bardziej elegancko dzięki za pomoc!
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_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
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 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.plczterowers.keep.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 |
|