354 Stimmen

INSERT mit SELECT

Ich habe eine Abfrage, die Einfügungen mit einer SELECT Erklärung:

INSERT INTO courses (name, location, gid) 
SELECT name, location, gid 
FROM courses 
WHERE cid = $cid

Ist es möglich, nur "Name, Ort" für das Einfügen auszuwählen und die gid zu etwas anderem in der Abfrage?

650voto

Andrew Punkte 14095

Ja, unbedingt, 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 seiner Stelle, natürlich nicht nur 1. Und, ich habe mir gerade die cid Wert.

42voto

Dumitrescu Bogdan Punkte 6872

Ja, das ist sie. Sie können schreiben:

INSERT INTO courses (name, location, gid) 
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci

oder Sie können die Werte aus einer anderen Verknüpfung des Select ...

8voto

RolandoMySQLDBA Punkte 42705

Correct Syntax: select Rechtschreibung war falsch

INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci

7voto

klennepette Punkte 3106

Klar, was wollen Sie für die gid verwenden? einen statischen Wert, eine PHP-Var, ...

Ein statischer Wert von 1234 könnte wie folgt aussehen:

INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid

3voto

Bud Damyanov Punkte 26959

Natürlich können Sie das.

Eine Sache 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 den Quell- und Zieltabellen übereinstimmen. Wenn die Datentypen der gegebenen Tabellenspalten nicht übereinstimmen (z.B. bei dem Versuch, ein VARCHAR en INT , oder TINYINT in INT ) wirft der MySQL-Server eine SQL Error (1366) .

Seien Sie also vorsichtig.

Hier ist die Syntax des Befehls:

INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;

Nebenbemerkung: Es gibt eine Möglichkeit, das Problem des Einfügens verschiedener Spaltentypen zu umgehen, indem man Gießen in Ihrem SELECT zum Beispiel:

SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

Diese Umwandlung ( CAST() ist ein Synonym für CONVERT() ) ist sehr nützlich, wenn Ihre Tabellen unterschiedliche Zeichensätze für dieselbe Tabellenspalte haben (was bei unsachgemäßer Handhabung zu Datenverlust führen kann).

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