2017-12-28 14 views
0

Mein Primärschlüssel der Spezialisierungstabelle ist komplex und besteht aus zwei Spalten: Specialization_id und Specialty_id (der Fremdschlüssel der Specialty-Tabelle ist). Ich werde einfügen einfügen durch Erstellen einer neuen Spezialisierung einer bestehenden Spezialität. Ich habe bereits einige Spezialisierungen in meiner Tabelle, Primärschlüssel für eine Spezialität mit ID = 1 sieht wie (1,1) (2,1) aus, mit ID = 2 sieht wie (1,2) (2,2) aus. Jetzt werde ich eine neue Spezialisierung in die Spezialisierungstabelle hinzufügen, aber diese Spezialisierung sollte sich auf existierende Spezialität beziehen. Meine Idee istFehler anhängen

INSERT INTO Specialization (Specialization_name, Specialization_id, Specialty_id) 
VALUES('Network technologies','(SELECT Max(Specialization_id) FROM Specialization WHERE Specialty_id = '2')+1', '2'); 

ich mit ‚‘ Klauseln versucht haben, und ohne sie, immer noch, ich bin immer Fehler. Was soll ich hier machen?

Antwort

1

Ihr Hauptfehler sind die Anführungszeichen. Da Ihre Unterabfrage zitiert wird, wird sie als Zeichenfolge und nicht als Abfrage verarbeitet.

Auch brauchen Sie nicht eine Unterabfrage zu verwenden, wenn Sie nicht über eine Hauptabfrage haben:

INSERT INTO Specialization (Specialization_name, Specialization_id, Specialty_id) 
SELECT 'Network technologies' As a, Max(Specialization_id)+1 As b, 2 As c 
FROM Specialization WHERE Specialty_id = 2 

Doch wie dstudeba sagte, auf automatische Nummerierung setzt neue IDs für die Erstellung ist wahrscheinlich intelligenter.

+0

Dieser Code gibt mir einen Fehler: Datentyp stimmt nicht überein mit Kriterienausdruck. Ich habe Specialization_name als Kurztext, Specialization_id als Nummer und Specialty_id als Nummer. Und insgesamt bekomme ich diese Abfrage nicht, wo ist VALUES (..)? Und auch meine Abfrage funktioniert nicht ohne Anführungszeichen auch, gibt den folgenden Fehler: Abfrage-Eingabe muss mindestens eine Tabelle oder Abfrage enthalten. – RaiseLtwiCe

+0

Es gibt keine 'VALUES', es ist eine 'INSERT INTO ... SELECT'-Klausel, dokumentiert [hier] (https://support.office.com/en-us/article/INSERT-INTO-Statement-e12fd58b-33b1 -479c-8221-e9f245ab8d24). Wenn ein Typ nicht übereinstimmt, geben Sie bitte die Datentypen für die einzelnen Felder an. Wenn 'Specialization_id' nicht numerisch ist, wird 'Max' unerwartete Ergebnisse liefern (bearbeitet, um zu übernehmen, dass speciality_id numerisch ist) –

+0

Ich habe Specialization_name als Kurztext, Specialization_id als Nummer und Specialty_id als Nummer. – RaiseLtwiCe

2

In einer Datenbank wie MySQL oder ORACLE sollten Sie den Primärschlüssel nicht programmatisch inkrementieren. Stattdessen sollten Sie das Feld auf AUTOINCREMENT festlegen, wenn Sie die Datenbank entwerfen.

Das Ihre INSERT Aussage ändern würde:

INSERT INTO Specialization (Specialization_name, Specialty_id) 
VALUES('Network technologies', '2') 

was nicht nur viel einfacher, ist es sicherer.

bearbeitet, um hinzuzufügen: Sind Sie sicher Specialty_id ist eine Zeichenfolge? Ich würde denken, es wäre eine Art Nummer.

+0

Ich bin kein Experte, aber ich werde nicht korrekt mit komplexen Primärschlüssel arbeiten. Ich habe es gemacht, weil ich irgendwo gelesen habe, dass wir, wenn wir eine Komposition haben, eine komplexe PK haben müssen. – RaiseLtwiCe

+0

@RaiseLtwiCe beziehen Sie sich auf einen zusammengesetzten Primärschlüssel? Wenn dies der Fall ist, wird der zusammengesetzte Primärschlüssel nicht automatisch inkrementiert, aber Sie erhöhen ihn auch nicht manuell. Was versuchen Sie mit Ihrem Primärschlüssel, den Sie manuell zuweisen müssen? – dstudeba

+0

Sorry für Tippfehler, ja, mein Primärschlüssel ist zusammengesetzt. Ich werde versuchen, die Situation im Allgemeinen zu erklären. Ich habe einen Tisch Spezialisierung und Spezialität. Ein Datensatz in der Spezialisierungstabelle, der sich auf eine Spezialität bezieht, kann nicht ohne die erforderliche Spezialität in der Spezialtabelle existieren. Also, nach meinem Wissen, wäre meine PK der Spezialisierungstabelle (Specialization_id, Specialty_id (als FK of Specialty Tabelle)). Wenn ich specialization_id inkrementiere, werde ich einige IDs verlieren, zum Beispiel habe ich PK (1,1) (2,1) und wenn ich auf eine andere specification_id verweisen muss, wird es stattdessen (3,2) (4,2) sein von (1,2) (2,2). – RaiseLtwiCe

Verwandte Themen