Antworten:
Ja, absolut, aber überprüfen Sie Ihre Syntax.
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
Sie können eine Konstante des gleichen Typs wie gidan ihre Stelle setzen, natürlich nicht nur 1. Und ich habe gerade den cidWert erfunden.
OUTPUTKlausel , mit der Sie alles, was Sie eingefügt haben, auch in eine andere Tabelle einfügen können. Ich glaube nicht, dass MySQL ein Äquivalent hat. Sie können eine temporäre Tabelle erstellen , in diese Tabelle auswählen, dann coursesaus dieser Tabelle füllen und dann die temporäre Tabelle für alles verwenden, was Sie sonst noch benötigen.
Ja, so ist es. Du kannst schreiben :
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
oder Sie können Werte von einem anderen Join der Auswahl erhalten ...
Richtige Syntax: Rechtschreibung auswählen war falsch
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
Klar, was willst du für das GID verwenden? ein statischer Wert, PHP var, ...
Ein statischer Wert von 1234 könnte sein wie folgt:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
Ich denke, Ihre INSERT-Anweisung ist falsch, siehe korrekte Syntax: http://dev.mysql.com/doc/refman/5.1/en/insert.html
edit: wie Andrew schon betont hat ...
Natürlich kannst du.
Eines sollte jedoch beachtet werden: Die INSERT INTO SELECTAnweisung kopiert Daten aus einer Tabelle und fügt sie in eine andere Tabelle ein UND erfordert, dass die Datentypen in Quell- und Zieltabellen übereinstimmen. Wenn die Datentypen aus den angegebenen Tabellenspalten nicht übereinstimmen (dh versuchen, sie VARCHARin INToder TINYINTin sie einzufügen) , löst INTder MySQL-Server eine aus SQL Error (1366).
Also sei vorsichtig.
Hier ist die Syntax des Befehls:
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;
Randnotiz: Es gibt eine Möglichkeit, das Problem beim Einfügen verschiedener Spaltentypen zu umgehen, indem Sie Casting in Ihrem SELECTBeispiel verwenden:
SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Diese Konvertierung ( CAST()ist ein Synonym für CONVERT()) ist sehr nützlich, wenn Ihre Tabellen unterschiedliche Zeichensätze in derselben Tabellenspalte haben (was bei unsachgemäßer Behandlung möglicherweise zu Datenverlust führen kann).
Die richtige Syntax für Ihre Abfrage lautet:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid