sql >> Database >  >> RDS >> Mysql

Kopieer rij maar met nieuwe id

Laten we zeggen dat uw tabel de volgende velden heeft:

( pk_id int not null auto_increment primary key,
  col1 int,
  col2 varchar(10)
)

om vervolgens waarden van de ene rij naar de andere rij te kopiëren met een nieuwe sleutelwaarde, kan de volgende vraag helpen

insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;

Dit genereert een nieuwe waarde voor pk_id veld en kopieer waarden van col1 , en col2 van de geselecteerde rij.

U kunt dit voorbeeld uitbreiden om meer velden in de tabel aan te vragen.

UPDATE :
Met respect voor de opmerkingen van JohnP en Martin -

We kunnen een tijdelijke tabel gebruiken om eerst van de hoofdtabel te bufferen en deze gebruiken om opnieuw naar de hoofdtabel te kopiëren. Een update van het pk-referentieveld in de tijdelijke tabel zal niet helpen, omdat het mogelijk al aanwezig is in de hoofdtabel. In plaats daarvan kunnen we het pk-veld uit de tijdelijke tabel laten vallen en alle andere naar de hoofdtabel kopiëren.

Met verwijzing naar het antwoord van Tim Ruehsen in de verwezen bericht :

CREATE TEMPORARY TABLE tmp SELECT * from my_table WHERE ...;
ALTER TABLE tmp drop pk_id; # drop autoincrement field
# UPDATE tmp SET ...; # just needed to change other unique keys
INSERT INTO my_table SELECT 0,tmp.* FROM tmp;
DROP TEMPORARY TABLE tmp;

Ik hoop dat dit helpt.



  1. MYSQL BESTELLEN PER GEVAL Probleem

  2. PostgreSQL-waarde uit vorige rij gebruiken als deze ontbreekt

  3. Binaire gegevens invoegen in MySQL (zonder PreparedStatement's)

  4. hoe de volgorde van LEFT JOIN in SQL-query te sorteren?