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 gid
an ihre Stelle setzen, natürlich nicht nur 1. Und ich habe gerade den cid
Wert erfunden.
OUTPUT
Klausel , 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 courses
aus 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 SELECT
Anweisung 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 VARCHAR
in INT
oder TINYINT
in sie einzufügen) , löst INT
der 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 SELECT
Beispiel 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