That would work, BUT, I'm looking for a way that I don't have to change the
code in the application when I change the structure of the table.  If I add
a column, I want its value copied to the new record, but don't want to have
to change the application to do so.

Your query requires me to alter the application everytime I change the
table, which I don't always want to do.

> -----Original Message-----
> From: Henrik Schröder [mailto:[EMAIL PROTECTED]
> Sent: Monday, March 29, 2004 3:07 PM
> To: 'Eric J. Janus'; 'MySQL'
> Subject: RE: INSERT ... SELECT question
> Importance: Low
>
>
> No, no, no, no need to make it that complicated! :-)
>
> If your table has the columns col1, col2, col3, col4, etc, and col1 is the
> autoincrement column, and you want to duplicate the entire table,
> something
> like this should work:
>
> INSERT INTO t1(col2, col3, col4, ...)
> SELECT col2, col3, col4, ... FROM t1
>
> The trick is that you select rows from your table that contain all columns
> except the auto_increment column, and then re-insert them without
> specifying
> a value for the auto_increment column, thereby assigning them a new value.
>
> If you don't want to duplicate the entire table, just add an appropriate
> where-clause to the above statement.
>
>
> /Henrik
>
> -----Original Message-----
> From: Eric J. Janus [mailto:[EMAIL PROTECTED]
> Sent: den 29 mars 2004 21:28
> To: Matt Chatterley; 'MySQL'
> Subject: RE: INSERT ... SELECT question
>
>
> Views would be nice. :)
>
> That idea sounds like it would work in a single-user envrinoment,
> which I'm
> not.  I agree, messy.
>
> I'll just write a function to build a field list from a specified table
> leaving out the AUTO_INCREMENT field...I can then do something like this:
>
> SQL = "INSERT INTO tbl_name(" + generate_field_list(tbl_name) +
> ")"; SQL +=
> SELECT " + generate_field_list(tbl_name) & " FROM tbl_name WHERE
> <where_clause>"
>
> Just a little more work that I was hoping for though!
>
> Thanks for the help.
>
> Eric
>
> > -----Original Message-----
> > From: Matt Chatterley [mailto:[EMAIL PROTECTED]
> > Sent: Monday, March 29, 2004 2:25 PM
> > To: 'Eric J. Janus'; 'MySQL'
> > Subject: RE: INSERT ... SELECT question
> > Importance: Low
> >
> >
> > Oh, if only there were views!! That would make this easy. Maybe soon
> > (*please*). :)
> >
> > Another approach (more cumbersome) might be to insert the rows you
> > need to duplicate into a temporary table, update the id_col adding
> > max(id_col) from
> > the original table to each, and then to insert from the temporary
> > table back into the original.
> >
> > I don't like that at all, though. It seems messy. Hopefully someone
> > here can come up with a better idea!
> >
> > Cheers,
> >
> >
> > Matt
> >
> > -----Original Message-----
> > From: Eric J. Janus [mailto:[EMAIL PROTECTED]
> > Sent: 29 March 2004 20:12
> > To: Matt Chatterley; 'MySQL'
> > Subject: RE: INSERT ... SELECT question
> >
> > There is only 1 table.  I want to replicate a record in a table except
> > the AUTO_INCREMENT column.
> >
> > Your solution would work, but I'd prefer to not have to maintain a
> > list of columns in the application.  Worst case I'll have the
> > application generate the query based on the table definition, but I
> > was hoping that MySQL had something built in to make this easier.
> >
> > Thanks,
> >
> > Eric
> >
> > > -----Original Message-----
> > > From: Matt Chatterley [mailto:[EMAIL PROTECTED]
> > > Sent: Monday, March 29, 2004 2:11 PM
> > > To: 'Eric J. Janus'; 'MySQL'
> > > Subject: RE: INSERT ... SELECT question
> > > Importance: Low
> > >
> > >
> > > Can you roughly outline the schema of the two tables?
> > >
> > > If the key value doesn't have to match from the input to the
> > final result,
> > > you can always insert into a list of fields, skipping the
> > > auto_increment/key column, and they will continue to be generated..
> > >
> > > Assuming you have two tables with id_col, col2, col3:
> > >
> > > INSERT INTO table (col2, col3)
> > > SELECT col2, col3 FROM table2 WHERE id_col=1;
> > >
> > >
> > > Regards,
> > >
> > > Matt
> > >
> > > -----Original Message-----
> > > From: Eric J. Janus [mailto:[EMAIL PROTECTED]
> > > Sent: 29 March 2004 19:37
> > > To: MySQL
> > > Subject: INSERT ... SELECT question
> > >
> > > I have a table with just about 100 columns, and I would like to
> > > duplicate a row exactly, except for one column, which is the
> > > AUTO_INCREMENT column.
> > >
> > > Using 'INSERT INTO tbl_name SELECT * FROM tbl_name WHERE id_col = 1'
> > > doesn't work, because it produces the following error: 'ERROR 1062:
> > > Duplicate entry
> > > '1' for key 1'.
> > >
> > > Because I'd like the application using this database to be simpler
> > > to maintain, I'd prefer to not have to change the code each time a
> > > field is added...so is there a way to duplicate a row, but still
> > > have it automatically assigned an value for the AUTO_INCREMENT
> > > column?
> > >
> > > Thanks,
> > >
> > > Eric
> > >
> > >
> > > --
> > > MySQL General Mailing List
> > > For list archives: http://lists.mysql.com/mysql
> > > To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED]
> >
> >
> >
>
>
>


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

  • ... ΝΙΚΟΣ ΓΑΤΣΗΣ
    • ... Nitin
      • ... ΝΙΚΟΣ ΓΑΤΣΗΣ
    • ... Fortuno, Adam
    • ... Eric J. Janus
      • ... Matt Chatterley
        • ... Eric J. Janus
          • ... Matt Chatterley
            • ... Eric J. Janus
    • ... Henrik Schröder
      • Eric J. Janus

Reply via email to