You will need to use the "full" INSERT...SELECT syntax:

INSERT (<list of columns to populate with data>)
SELECT <list of columns/values to populate the list above with>
FROM ....

For auto_increment columns, I assume that your housekeep_ID columns is one
of those, you do not include it in either list. For each column in your
INSERT clause you must provide a value for that column with your SELECT
clause. Those values can be straight column data, combinations of values,
formulas, or constants. All you have to keep in mind is that each column
specified in the INSERT must have a value of appropriately typed data. For
any column NOT listed in your INSERT clause, those columns will be
populated with their default values or an auto_increment value (as
determined when you created the table). If you do not know what your
default values are, you can see them as a result of the SHOW CREATE TABLE
<tablename here> statement.

Lets say you have a table called "archive" that has columns designed to
store 35 of the 40 columns of one of your "sales" tables plus 3 additional
columns:
      ArchiveID int auto_increment
      ArchiveDate datetime
      ArchiveSource varchar(10)

To copy some of the records from your "northeast" sales table you would
write a statement like:

INSERT archive (ArchiveDate, ArchiveSource, <35 archive table column
names>)
SELECT NOW(), 'northeast', <35 Sales_NE column names, values, functions, or
formulas>
FROM Sales_NE
WHERE .....

The first list of 35 column names will be as they appear in the "archive"
table. The second list will use the column names and values as they appear
in the "Sales_NE" table. Each column listed in the INSERT clause will get
the value from the ****same position**** (not necessarily the same name) as
is defined in the SELECT clause. Notice that I did not list the column nor
did I list a value for "ArchiveID"? In this example, that column is defined
as an auto_increment value and each row will get it's value from the
engine.

Hope this helps!

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine



|---------+---------------------------->
|         |           "darren"         |
|         |           <[EMAIL PROTECTED]|
|         |           box.com>         |
|         |                            |
|         |           07/08/2004 06:16 |
|         |           AM               |
|         |                            |
|---------+---------------------------->
  
>--------------------------------------------------------------------------------------------------------------------------------|
  |                                                                                    
                                            |
  |       To:       <[EMAIL PROTECTED]>                                                
                                        |
  |       cc:                                                                          
                                            |
  |       Fax to:                                                                      
                                            |
  |       Subject:  RE: moving records between tables?                                 
                                            |
  
>--------------------------------------------------------------------------------------------------------------------------------|




Hi all,

Thanks for the help.

So I can "Insert into archive_table select * from active_table where
condition='true'", followed by a delete from active_table...

If my archive_tabler is nearly exactly the same but has two more fields
(housekeep_id, and now()), how do I modify the above statement to move the
record to archive_table and add in two more fields?

-----Original Message-----
From: darren [mailto:[EMAIL PROTECTED]
Sent: Wednesday, July 07, 2004 11:44 PM
To: [EMAIL PROTECTED]
Subject: moving records between tables?

Hi all,

I have 2 tables...one for keeping active items while the other is for older
records.

A housekeep program will come in every night to move some records (matching
several criteria from the active table to the history one.

I am currently doing SELECT, INSERT and then DELETE. i.e. a "select * from
active where key=key_value limit 1" and then a "insert into history..." and
then a "delete * from active where pri_key='pri_key_value'..."

I am sure there's a better way right??


--
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]

Reply via email to