2009-07-10 10 views
0

Ich habe eine Tabelle:Einfügen ‚geradzahlige‘ Zeilen in eine vorhandene Tabelle in mysql

+----------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+----------------+--------------+------+-----+---------+----------------+ 
| fooID   | int(11)  | NO | PRI | NULL | auto_increment | 
| fooDetails  | varchar(200) | YES |  | NULL |    | 
| fooListingID | int(10)  | YES |  | NULL |    | 
| fooStatus  | tinyint(4) | YES |  | 0  |    | 
+----------------+--------------+------+-----+---------+----------------+ 

Ich möchte Daten aus einer ähnlichen Tabelle mit dieser Tabelle verschmelzen, aber ich würde die Daten gerne so werden abwechselnd die vorhandenen Daten in dieser Tabelle sind alle ungerade "fooID" und die neuen Inserts sind alle die geraden "fooID".

Ideen?

+2

Das riecht das den Beginn einer sehr schlechte Idee. Warum willst du das machen? Es wäre viel besser, eine weitere Spalte hinzuzufügen, wenn Sie ein Attribut dieser Zeile speichern möchten, anstatt sich auf einen obskuren Trick wie das Speichern von Informationen im ungeraden/geraden Status der Identitätsspalte zu verlassen. Wenn Sie einige Hintergrundinformationen darüber geben könnten, warum Sie dies tun möchten, könnte jemand eine bessere Lösung für das zugrunde liegende Problem bieten. – JohnFx

Antwort

3

Ich habe interpretiert Ihr Problem, wie Sie alle vorhandenen fooIDs ungerade machen zu machen, und dann verschmelzen in dieser Tabelle ein paar neue, auch fooIDs.

Sie können dies ziemlich leicht erreichen:

#first make all the existing ids odd 
UPDATE oldtable SET fooID=fooID*2-1; 

#now insert rows from the other table, making sure the ids are even  
INSERT INTO oldtable (fooID,fooDetails,fooListingID,fooStatus) 
    SELECT fooID*2,fooDetails,fooListingID,fooStatus FROM newtable; 
+0

+1 Die genaue Idee, die ich hatte :) –

+0

Arbeitete wie beabsichtigt. Vielen Dank. – user44585

1

Sie können das Ergebnis einer SELECT-Anweisung einfügen. Verwenden Sie modulo für Wechsel ids:

INSERT INTO NewTable 
SELECT column1, column2 
FROM OldTable 
WHERE NOT id % 2 
+0

Nur für gerade Zeilen, möchten Sie "WHERE ID% 2" – mkb

+2

Diese Techique verliert jede zweite Zeile von OldTable, ich bin mir nicht sicher, das ist, was die OP wollte? –

Verwandte Themen