2012-08-10 3 views
8

Verfolgt Einsatz bei der Auswahl basierend auf einem der Spalte möglich in MySQList einfügen basierend auf Wählen Sie eine der Spalten in MySQL möglich?

INSERT INTO student_fees(id, name, fees) 
VALUES(1, SELECT name from students where student_id = 1, 200$) 

Wenn ja, dann und Beispiel wirklich helfen.

-Danke

+0

Das [MySQL-Handbuch] (http://dev.mysql.com/doc/refman/5.5/en/insert-select.html) besagt eindeutig, dass es möglich ist. Ihre Syntax ist jedoch falsch. – Jocelyn

Antwort

9

Versuchen INSERT...SELECT Anweisung

INSERT INTO student_fees(id, name, fees) 
SELECT ... -- put here the SELECT STATEMENT with condition 

Wenn Ihre Spalte IDauto incremented ist, müssen Sie nicht 1 angeben, da sonst ein Fehler verursacht wird.

INSERT INTO student_fees(name, fees) 
SELECT `name`, '200$' 
FROM students   -- this will select all students on the table 
         -- and add $200 on thier fees. 

Ein weiterer Punkt ist, wenn Sie nur eine Spalte von der student ‚s Tabelle einfügen möchten, müssen Sie yo den Zustand angeben, so dass Sie nicht Einschränkungsfehler erhalten (Ihre Spalte ID vorausgesetzt, ist der Primärschlüssel)

INSERT INTO student_fees(name, fees) 
SELECT `name`, '200$' 
FROM students 
WHERE columnName = 'blahBlah' 

UPDATE 1

Sehen Sie Ihren Kommentar hinzu, haben Sie diese Abfrage

INSERT INTO coupon_allotment (page_id, offer_id, coupon_code, user_id) 
SELECT page_id, 4, 'ABC'  -- number of columns mismatch, right? 
FROM pages_discounts_association 
WHERE discount_id = 4 

Sie benötigen die user_id Spalte oben zu entfernen, oder Sie brauchen eine ID in Ihrer SELECT-Anweisung zu geben, um die Anzahl der Spalten übereinstimmen.

+0

INSERT INTO coupon_allotment (page_id, offer_id, coupon_code, user_id) SELECT page_id, 4, 'ABC' VON pages_discounts_association WHERE discount_id = 4 Dies ist meine eigentliche Suchanfrage, können Sie das für mich korrigieren? –

+0

ist es eine Anzahl von Spalte nicht übereinstimmen. Ich habe gerade meine Abfrage aktualisiert .. sehen, ob es jetzt funktioniert. –

+0

Ja, danke für deine Hilfe :) –

3

einfach die regelmäßige INSERT INTO ... SELECT Syntax verwenden und die anderen Felder als Konstanten wie folgt auswählen:

INSERT INTO student_fees(id, name, fees) 
SELECT 1, `name`, '200$' FROM students 
+0

funktioniert nicht, ist die eigentliche Abfrage: INSERT INTO 'coupon_allotment' (page_id, offer_id, coupon_code, user_id) SELECT page_id, 4, 'ABC' VON' pages_discounts_association' WHERE 'discount_id' = 4 –

+0

@Abhishek Ihre Tabelle in der eigentlichen Abfrage hat 4 Spalten (page_id, offer_id, coupon_code, user_id), während Sie in SELECT nur 3 haben. Sie müssen so viele Spalten in SELECT haben wie in der Anweisung INSERT, damit diese Abfrage funktioniert ! – Sirko

+0

@Abhishek: Sie müssen die gleiche Anzahl von Feldern in 'VALUES (...)' und in 'SELECT' haben. In Ihrem Fall: 4 Felder, dann 3 Felder. – Jocelyn

2

versuchen Sie dies:

INSERT INTO student_fees(id, name, fees) 
Select 1, name,'200$' from students 
Verwandte Themen