2016-07-04 5 views
0

tabelle1: bo_indexable_attributedoppelte Eintrag für die wichtigste Primär in mysql

id   version   mcs   name  search_id 
285   3    13   name1  16 
286   3    13   name2  16 
287   3    13   name3  16 

, was ich will, ist den Inhalt dieser Tabelle kopieren und in ihn wieder ein, aber diesmal mit unterschiedlicher mcs Spalte so mein tryings ist

CREATE TEMPORARY TABLE bo_scenario_indexable_attribute_temp (SELECT * FROM bo_scenario_indexable_attribute WHERE mcs = @sales); 

UPDATE bo_scenario_indexable_attribute_temp SET mcs = @sales_master; 

INSERT INTO bo_scenario_indexable_attribute SELECT * FROM bo_scenario_indexable_attribute_temp; 

aber das gibt mir Duplicate entry '285' for key 'PRIMARY'

irgendwelche Vorschläge ??

+0

Entfernen Sie die ID aus eingefügten Vales, da die ID ein Primärschlüssel ist – Jens

+0

Wenn Ihre ID-Spalte nicht automatisch erhöht wird, müssen Sie für jeden Datensatz neue Werte generieren. Wenn dies der Fall ist, geben Sie einfach die Spaltennamen in der Anweisung insert ... select an und lassen Sie die Datenbank neue IDs für Sie generieren. –

+0

Wenn ich die Spalten schreibe, die es mir gibt, muss 1 Spalte (n) sein –

Antwort

0

Sie haben Ihre Tabelle durch die erste Anweisung in eine temporäre kopiert. Dann machen Sie eine Aktualisierung und in der dritten Anweisung versuchen Sie, die gleichen Datensätze in die erste Tabelle einzufügen. Vielleicht hat Ihre ID-Spalte einen eindeutigen Schlüssel, so dass Sie einen "doppelten Eintrag für den primären Schlüssel" erhalten.

einen Blick hier nehmen: SQL UNIQUE Constraint

+0

meine ID ist Primärschlüssel Autoinkrement –

0

Wie @Franky wies darauf hin, Ihre id Spalte hat eine eindeutige Einschränkung. Verwenden Sie diese Option:

INSERT INTO bo_scenario_indexable_attribute SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute_temp;

Durch Verlassen den id Wertes aus Einfügung wird es die Spalte einen neuen, unbenutzten ID-Wert zugewiesen werden, den die eindeutige Einschränkung auf der Säule gegeben erfüllt.


Bearbeiten auf den ersten Kommentar basiert:

Verwenden Sie den folgenden Abfragen:

CREATE TEMPORARY TABLE bo_scenario_indexable_attribute_temp (SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute WHERE mcs = @sales); 

UPDATE bo_scenario_indexable_attribute_temp SET mcs = @sales_master; 

INSERT INTO bo_scenario_indexable_attribute SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute_temp; 

Sie haben diesen Fehler, weil Sie mehr Spalten in der SELECT geholt, als Sie in Ihren INSERT einfügen.

+1

es gibt mir Error Code: 1136. Spalte count stimmt nicht value count in Zeile 1 –

+0

Meine schlechte, werfen Sie einen Blick auf die Bearbeitung. –

Verwandte Themen