2016-04-05 23 views
0

Hallo Ich versuche, Zeilen in einer Tabelle zu kopieren, aber ich brauche es mit einer anderen ID, die auch in dieser Tabelle sein kann. Sowohl id als auch second_id sind Primärschlüssel. und Fremdschlüssel.Kopieren von Zeilen in einer Tabelle in die gleiche Tabelle mit einer anderen ID

+----+-----------+ 
| id | second_id | 
+----+-----------+ 
| 1 |   1 | 
| 1 |   2 | 
| 1 |   3 | 
| 2 |   2 | 
+----+-----------+ 

Also muss ich alle second_id von id 1 auf die ID 2 kopieren, aber und schließlich, wenn es das aswell ID 3, kopieren sein wird. id ist ein Fremdschlüssel, also wenn ich id 3 Kopie es aswell wie id 2 Alle Lösungen

sollte das Ergebnis

+----+-----------+ 
| id | second_id | 
+----+-----------+ 
| 1 |   1 | 
| 1 |   2 | 
| 1 |   3 | 
| 2 |   2 | 
| 2 |   1 | 
| 2 |   3 | 
+----+-----------+ 

auch sein?

+0

zeigen Sie uns Ihre Beispieldaten und den Wunsch Ergebnis. \t Bitte lesen Sie [** How-to-Frage **] (http://stackoverflow.com/help/how-to-ask) \t \t Und hier ist ein toller Ort, um [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) um zu erfahren, wie Sie Ihre Fragequalität verbessern und bessere Antworten erhalten. –

+0

schreibe erwartetes Ergebnis ... –

Antwort

0

Verwenden Sie einen Self-Join der Tabelle, um alle Kombinationen von id und second_id zu erhalten. Verwenden Sie dann eine LEFT JOIN, um die bereits vorhandenen Kombinationen herauszufiltern, damit Sie den Rest in die Tabelle einfügen können.

INSERT INTO yourTable (id, second_id) 
SELECT DISTINCT t1.id, t2.second_id 
FROM yourTable AS t1 
CROSS JOIN yourTable AS t2 
LEFT JOIN yourTable AS t3 ON t1.id = t3.id AND t2.second_id = t3.second_id 
WHERE t3.id IS NULL 

DEMO

Statt der LEFT JOIN Sie einfach INSERT IGNORE nutzen könnten. Da (id, second_id) der Primärschlüssel ist, werden die Duplikate beim Einfügen einfach ignoriert.

INSERT IGNORE INTO yourTable (id, second_id) 
SELECT DISTINCT t1.id, t2.second_id 
FROM yourTable AS t1 
CROSS JOIN yourTable AS t2 

DEMO

Verwandte Themen