9 Stimmen

Einfügen von Daten aus einer anderen Tabelle mit einer Schleife in mysql

Ich könnte es lösen mit php oder eine andere Sprache, aber ich möchte gerne mehr SQL lernen.

Gibt es eine Möglichkeit, dieses Problem zu lösen?

Ich habe zwei Tabellen (und ich kann die Struktur nicht ändern), eine content mit einigen Daten und die andere content_info mit einigen zusätzlichen Informationen. Sie sind auf diese Weise miteinander verbunden: content.id = content_info.content_id .

Was ich gerne tun würde: Wenn es keinen Datensatz in content_info aber in content Ich möchte sie so umkopieren, dass am Ende in beiden Tabellen die gleiche Anzahl von Datensätzen steht. Ich habe es auf diese Weise versucht, aber leider funktioniert es nicht:

...
BEGIN
  (SELECT id, ordering FROM content;)
  cont:LOOP
    @cid = SELECT content_id FROM content_info WHERE content_id = (id)
    IF @cid != (id) THEN
      INSERT INTO content_info SET content_id = (id), ordering = (ordering)
      ITERATE cont;
    END IF;
  END LOOP cont;
END
..

Hat jemand eine Idee, oder ist es am Ende nicht möglich? Vielen Dank im Voraus!

13voto

Bill Karwin Punkte 493880

Sie können verwenden INSERT IGNORE um neue Zeilen einzufügen, aber nichts zu tun, wenn es bereits eine Zeile in der Tabelle gibt, die einen Fehler wegen eines doppelten Eintrags verursachen würde.

INSERT IGNORE INTO jos_content_frontpage (content_id, ordering)
SELECT id, ordering FROM jos_content

3voto

Brent Baisley Punkte 12551

Es scheint, dass Sie nach der INSERT ... SELECT-Syntax suchen. Jeder Select kann in eine Tabelle eingefügt werden, sofern Sie die Daten so formatieren, dass sie mit der Zieltabelle übereinstimmen.

Außerdem ist Ihre INSERT-Syntax nicht korrekt. Sieht aus, als würden Sie die UPDATE-Syntax verwenden.

INSERT INTO table (field1, field2, field3) VALUES ('1','2','3');

INSERT INTO table (field1, field2, field3) SELECT field1, field2, field3 FROM ...

2voto

Ich gebe nur ein Beispiel für ein Feld, das id-Feld. Sie können auch andere Felder hinzufügen:

insert into content_info(content_id)
select content.id
from content left outer join content_info
on (content.id=content_info.content_id)
where content_info.content_id is null

andere Art

insert into content_info(content_id)
select content.id
from content 
where not exists (
     select *
     from content_info
     where content_info.content_id  = content.id 
)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X