Kom ihåg mig?
Home Menu

Menu


MySql: Uppdatera tabell A med rader från B

 
Ämnesverktyg Visningsalternativ
Oläst 2008-11-27, 16:19 #1
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
Jag har två tabeller, A och B. Tabellerna har exakt samma tabelldefinition, men olika data. Primärnyckel finns (produkt_id).

Nu vill jag uppdatera tabell A, med alla rader från tabell B.

Dvs någonting sådant här:

Kod:
UPDATE TABLE A SELECT * FROM TABLE B
Men jag får det inte att fungera. Jag får meddelandet "You have an error in your SQL syntax"

Här är dokumentationen:
http://dev.mysql.com/doc/refman/5.0/en/update.html

Någon som vet vad jag gjort för fel?
radioaktivitet är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-27, 17:00 #2
orreborres avatar
orreborre orreborre är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2003
Inlägg: 309
orreborre orreborre är inte uppkopplad
Flitig postare
orreborres avatar
 
Reg.datum: Apr 2003
Inlägg: 309
INSERT INTO A SELECT * FROM B
borde fungera...
Eller varför ska du uppdatera?
orreborre är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-27, 17:55 #3
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
mbomelin mbomelin är inte uppkopplad
Medlem
 
Reg.datum: Feb 2004
Inlägg: 248
vill du inte ha dubletter så bör REPLACE INTO A SELECT * FROM B funka... eller?
mbomelin är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-27, 18:06 #4
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Resultatet beror i så fall på om det finns gamla rader i A som inte har sin motsvarighet i B.
Vill man att innehållet i A ska bli helt identiskt med B bör man tömma tabellen innan:
truncate table A;
insert into A select * from B;
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-27, 19:25 #5
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
Varje dag kopierar jag ett antal rader från tabell A till tabell B. Tabell B jobbar jag mot under dagen. Sedan i slutet av dagen vill jag se till att all data från tabell B kommer tillbaks till A. Ingen rader tas bort/läggs till tabell B. Jag bara manipulerar den befintliga datan i tabell B.

Därför tänkte jag att en update räcker.

Replace skulle nog fungera. Men en replace är ju en delete och en insert, dvs två operationer. Tar förmodligen dubbelt så lång tid att exekvera. Helst skulle jag vilja göra en update. Men det kanske inte går?

Edit. Tack för alla svar förresten
radioaktivitet är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-27, 20:57 #6
orreborres avatar
orreborre orreborre är inte uppkopplad
Flitig postare
 
Reg.datum: Apr 2003
Inlägg: 309
orreborre orreborre är inte uppkopplad
Flitig postare
orreborres avatar
 
Reg.datum: Apr 2003
Inlägg: 309
Du kan bara uppdatera en rad om den redan finns och som jag förstått det vill du föra över nya rader och då fungerar det inte med en UPDATE.
orreborre är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-27, 21:07 #7
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
Då tror jag att du missförstod det jag skrev. Jag vill bara uppdatera rader som redan finns. Inte ta bort och inte lägga till nya rader.

Fungerar det med en update då, och vad är det för fel på min sql-fråga?
radioaktivitet är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-27, 21:28 #8
jimmies avatar
jimmie jimmie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 751
jimmie jimmie är inte uppkopplad
Mycket flitig postare
jimmies avatar
 
Reg.datum: Oct 2004
Inlägg: 751
http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html

Så använder du values(xyz) för att göra update för dom rader som redan finns.

Lycka till.
jimmie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-27, 21:33 #9
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Replace into gör det du vill, är standard förfaringssätt och går snabbt.
Vill du ändå använda update av nån anledning skriver du så här: update A, B set A.kolumn1 = B.kolumn1, (osv)...... where A.indexkolumn = B.indexkolumn;
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-11-28, 10:14 #10
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
radioaktivitet radioaktivitet är inte uppkopplad
Flitig postare
 
Reg.datum: Jun 2006
Inlägg: 336
Tack allihopa. Replace blev lösningen :-)
radioaktivitet är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 14:06.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017