FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
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 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? |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Flitig postare
|
INSERT INTO A SELECT * FROM B
borde fungera... Eller varför ska du uppdatera? |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
vill du inte ha dubletter så bör REPLACE INTO A SELECT * FROM B funka... eller?
|
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
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; |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Flitig postare
|
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 ![]() |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Flitig postare
|
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.
|
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Flitig postare
|
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? |
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
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. |
|||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Klarade millennium-buggen
|
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; |
||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Flitig postare
|
Tack allihopa. Replace blev lösningen :-)
|
||
![]() |
![]() |
Svara |
|
|