Insert mit SubSelect?
hawkmaster
- datenbank
Hallo zusammen,
in einer MySQL Tabelle "accdep" stehen Kostenstellen ID's und Abteilungs ID's
ID,AccID,DepID
1 4 11
2 6 2
Die Tabelle "departments" enthält die Namen der Abteilungen
Jetzt möchte ich prüfen ob in "accdep" alle Abteilungs IDs vorkommen die in der Tabelle "departments" drin sind. Wenn nicht sollen diese eingetragen werden mit einer Default Kostenstelle ID.
Ich versuche das mit einem Insert und SubSelect
INSERT INTO accdep (DepartmentsID) SELECT
A.DepartmentsID
FROM departments A
LEFT JOIN accdep B ON A.DepartmentsID = B.DepartmentsID
WHERE B.DepartmentsID IS NULL
So funktiojiert es zwar aber hier habe ich ja noch keine Default Kostenstelle.
Wenn ich es so versuche mit der Variablen $accountid_default und zusätzlicher Spalte "AccountID" bekomme ich einen MySQL Fehler;
$DBO->exec("INSERT INTO (DepartmentsID,AccountID) VALUES ((SELECT
A.DepartmentsID
FROM departments A
LEFT JOIN accdep B ON A.DepartmentsID = B.DepartmentsID
WHERE B.DepartmentsID IS NULL),'$accountid_default')") ;
Wie muss die Schreibweise sein damit es kein Syntax Fehler gibt?
Könnte man das Ganze auch anders lösen?
vielen Dank und viele Grüße
hawk
Habe eben die richtige Schreibweise ohne VALUES herausgefunden.
vielen Dank und viele Grüße
hawk
Habe eben die richtige Schreibweise ohne VALUES herausgefunden.
Schön, dass du selber draufgekommen bist. Draus lernt man mMn immer am meisten.
Trotzdem wärs gut wenn du die Lösung postest, denn wenn jemand per Suchfunktion auf diesen Thread stösst, so wird er einmal nicht enttäuscht weitersuchen müssen, weil wieder keine Lösung steht.
Hallo Snafu,
Trotzdem wärs gut wenn du die Lösung postest, denn wenn jemand per Suchfunktion auf diesen Thread stösst, so wird er einmal nicht enttäuscht weitersuchen müssen, weil wieder keine Lösung steht.
Da hast du natürlich vollkommen recht und ich will das hiermit gerne nachholen. Schließlich hat mir die Suchfunktion auch oft geholfen.
Lösung:
Man darf bei einem Insert mit Select nicht mit "Values" arbeiten.
Vielmehr muss die Variable $accountid_default für die zweite Spalte "AccountID" direkt im Select angegeben werden.
INSERT INTO accdep (DepartmentsID,AccountID) SELECT
A.DepartmentsID,$accountid_default
FROM departments A
LEFT JOIN accdep B ON A.DepartmentsID = B.DepartmentsID
WHERE B.DepartmentsID IS NULL
Ich hoffe ich liege damit richtig. zumindest klappt es soweit bei mir.
Allerding habe ich im Netz auch ein Insert..Select Beispiel gesehen das auch mit "VALUES" gearbeitet hat.
vielen Dank und viele Grüße
hawk