2016-12-19 4 views
-1

Ich versuche eine gespeicherte Prozedur zu erstellen, die einen Instruktor in einer Abteilung hinzufügt. Das Problem ist, dass es mir nicht gelingt, die Instructor-ID aus einer Tabelle basierend auf dem Vor- und Nachnamen aus der Eingabe auszuwählen und sie in die zweite Tabelle als Fremdschlüssel einzufügen.mysql Fehlercode 1064 beim Versuch ID aus einer Tabelle als Fremdschlüssel in zweite Tabelle einzufügen

Dies ist der Fehler, die ich erhalte:

Error code 1064, SQL state 42000: You have an error in your SQL 
syntax; check the manual that corresponds to your MariaDB server 
version for the right syntax to use near 'instructor.id WHERE 
research_dep.name = researchName and instructor.firstname = 
' at line 4 

Dies ist, wie ich versuche, den Vorgang

DELIMITER @@ 
CREATE PROCEDURE sp_add_instructor_to_research 
(iFirstName varchar(60) 
, iLastName varchar(60) 
, researchName varchar(60)) 
BEGIN 

INSERT INTO research_dep.fk_instructor_id 
SELECT id 
FROM instructor 
WHERE instructor.firstname = iFirstName 
and instructor.lastname = iLastName 
and research_dep.name = researchName; 

END @@ 
DELIMITER ; 
+0

Ich sehe kein 'und instructor.firstname =' nach 'research_dep.name = researchName' in Ihrer Abfrage. Ist das die Abfrage, die Sie verwendet haben? – Siyual

+0

Die Abfrage in der Frage und die Fehlermeldung stimmen nicht überein. In der Fehlermeldung steht "instructor.id" vor dem Schlüsselwort 'where'. – Shadow

Antwort

0

Sie müssen dafür Spaltennamen in der Insert-Anweisung sepecify, zB:

INSERT INTO TABLE (COLUMN1) SELECT COLUMN2 FROM TABLE2; 

Ihre Anfrage wird wie folgt aussehen:

INSERT INTO research_dep (instructor_id) 
SELECT id 
FROM instructor 
WHERE instructor.firstname = iFirstName 
and instructor.lastname = iLastName 
and research_dep.name = researchName; 
1

Sie haben keine Details zu den Tabellen angegeben, die Sie bearbeiten - normalerweise eine gute Idee. Aber in diesem Fall ist es nicht wirklich relevant.

and research_dep.name = researchName; 

Sie können nicht die Tabelle verweisen Sie INTO (research_dep) aus einer Abfrage einfügen, die sie als Datenquelle nicht (in der von der Liste) verwenden. Selbst wenn Sie die Tabelle in der Von-Liste hätten, müssten Sie ihr einen anderen Alias ​​zuweisen und eine Join-Klausel hinzufügen.

Ferner können Sie nicht in ein Feld INSERT - Sie fügen in eine Tabelle (mit einer optionalen Feldliste in Klammern) einfügen. z.B.

Ich kann nicht aus dem Code, den Sie zur Verfügung gestellt haben, was Sie beabsichtigen, die Abfrage zu tun, und daher kann nicht vorschlagen, was die Abfrage sein sollte.

Verwandte Themen