2Danke
ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
324
324
EMPFEHLEN
-
Hallo Forum,
ich möchte eine Tabelle mit neuen Datensätzen aus einer anderen Tabelle erweitern aber irgendwie bekomme ich das nicht auf die Reihe.
Folgendes hab ich mir zusammen gebastelt:
INSERT INTO
hersteller
SET
shop_iD = 1,
Hersteller_ID = NULL,
ADDR_ID = -1,
HERSTELLER_NAME =
SELECT
update.hersteller_name
FROM
update
LEFT JOIN
hersteller
ON
update.HERSTELLER_NAME = hersteller.HERSTELLER_NAME
WHERE hersteller.HERSTELLER_ID IS NULL,
HERSTELLER_IMAGE = NULL,
LAST_CHANGE = NOW(),
SHOP_DATE_ADDED = NULL,
SHOP_DATE_CHANGE = NULL,
CHANGE_FLAG = 'Y',
DEL_FLAG = 'N';
Leider funktioniert das so nicht, ich hoffe mir kann jemand einen Tip geben wie ich die Sache richtig angehe.
-
01.07.10 10:05 #2
- Registriert seit
- Sep 2008
- Ort
- Osnabrück (Niedersachsen)
- Beiträge
- 244
Hallo,
schau mal hier:
hierProgrammieren ist ein Wettbewerb zwischen dem Programmierer,
die Software idiotensicher zu machen, und dem Universum, das versucht,
größere Idioten zu produzieren. Bis jetzt gewinnt das Universum.
-
Es gibt zwar eine INSERT ... SET Syntax, aber ich glaube nicht in Kombination mit SELECT. Dort lautet die Syntax etwas anders.
Versuch mal folgendes
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14
INSERT INTO hersteller (shop_iD, Hersteller_ID, ADDR_ID, HERSTELLER_NAME) SELECT 1, NULL, -1 `update`.hersteller_name FROM `update` LEFT JOIN hersteller ON `update`.HERSTELLER_NAME = hersteller.HERSTELLER_NAME WHERE hersteller.HERSTELLER_ID IS NULL, HERSTELLER_IMAGE = NULL, LAST_CHANGE = NOW(), SHOP_DATE_ADDED = NULL, SHOP_DATE_CHANGE = NULL, CHANGE_FLAG = 'Y', DEL_FLAG = 'N';
Eine Fehlermeldung wäre übrigens interessant gewesen.
Und wer kam auf die Idee die Tabelle "update" zu nennen? Eventuell muss das in backticks gefasst werden: `update`
EDIT: Folgende WHERE Bedingung wird wohl nie eintreffen: LAST_CHANGE = NOW()Geändert von CPoly (01.07.10 um 10:10 Uhr)
-
@CPoly
Ich habe deinen Code mal lauffähig gemacht:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
INSERT INTO hersteller (shop_iD, Hersteller_ID, ADDR_ID, HERSTELLER_NAME, HERSTELLER_IMAGE, LAST_CHANGE, SHOP_DATE_ADDED, SHOP_DATE_CHANGE, CHANGE_FLAG, DEL_FLAG) SELECT 1, NULL, -1, (SELECT t_update.hersteller_name FROM t_update LEFT JOIN hersteller ON t_update.HERSTELLER_NAME = hersteller.HERSTELLER_NAME WHERE hersteller.HERSTELLER_ID IS NULL), NULL, NOW(), NULL, NULL, 'Y', 'N';
Jetzt hängt er mir zwar einen Datensatz an aber HERSTELLER_NAME bleibt leer.
Hast Du noch eine Idee?
-
Dann liefert die innere Abfrage wohl keinen Wert zurück. Also musst du prüfen, ob
Code sql:1 2 3 4 5 6 7 8 9
SELECT t_update.hersteller_name FROM t_update LEFT JOIN hersteller ON t_update.HERSTELLER_NAME = hersteller.HERSTELLER_NAME WHERE hersteller.HERSTELLER_ID IS NULL
Genau eine Zeile liefert. Um auch mehrere auf einmal einzutragen, musst du es so schreiben wie ich (nur ein SELECT, dass innere ist unnötig).
-
OK, das mit dem leeren Eintrag war mein Fehler

Wenn ich es so schreibe wie du es vorschlägst erhalte ich einen "Syntax Error near Hersteller_Image...."
Und mein Query bringt die Fehlermeldung daß mehr als eine Zeile eingelesen werden soll.Geändert von null_plan (01.07.10 um 13:43 Uhr)
-
Nutz doch bitte die sql-Tags, wegen des syntax highlighting
Ja, weil die Bedingungen nicht mit Komma, sondern z.B. mit AND verbunden werden müssen. Ich schreib mal dein zuletzt genanntes Query um (Denk daran, es so ab zu ändern, dass auch mindestens eine Zeile als Ergebnis der Abfrage kommt):
Code sql:1 2 3 4
INSERT INTO hersteller (shop_iD, Hersteller_ID, ADDR_ID, HERSTELLER_NAME, HERSTELLER_IMAGE, LAST_CHANGE, SHOP_DATE_ADDED, SHOP_DATE_CHANGE, CHANGE_FLAG, DEL_FLAG) SELECT 1, NULL, -1, t_update.hersteller_name, NULL, NOW(), NULL, NULL, 'Y', 'N' FROM t_update LEFT JOIN hersteller ON t_update.HERSTELLER_NAME = hersteller.HERSTELLER_NAME WHERE hersteller.HERSTELLER_ID IS NULL
Sollte jetzt mit beliebig vielen Zeilen funktionieren.
-
Jetzt kapier ich das ganze

Eine Frage hab ich jetzt noch, wie kann man verhindern daß ein leerer Datensatz angehängt wird (ich denke da z.B. an meinen Fehler).
Großes ? meinerseits, ich hab hier nur Code, HTML und PHP oder was meinst DU?Nutz doch bitte die sql-Tags, wegen des syntax highlighting
-
01.07.10 19:54 #9Maik Tutorials.de Gastzugang
-
Danke Maik, werde mich in Zukunft daran halten.
-
01.07.10 20:12 #11Maik Tutorials.de Gastzugang
[highlight=sql] [/highlight] ist hier ebenso möglich.
Nach "highlight=" lässt sich der Name der Sprache angeben.
mfg Maik
-
Falls du mit "leer" meinst, dass "t_update.hersteller_name" NULL ist, musst du das eben in der WHERE Bedingung noch ausschließen. Vielleicht hilft es auch, bei LEFT JOIN das Wort LEFT zu entfernen. Hier zu der Auszug aus der Dokumentation:
http://dev.mysql.com/doc/refman/5.1/de/join.htmlIst für die rechte Tabelle im ON- oder USING-Teil eines LEFT JOIN kein passender Datensatz vorhanden, dann wird für die rechte Tabelle ein Datensatz verwendet, bei dem alle Spalten auf NULL gesetzt sind.
Ohne left:
Code sql:1 2 3 4
INSERT INTO hersteller (shop_iD, Hersteller_ID, ADDR_ID, HERSTELLER_NAME, HERSTELLER_IMAGE, LAST_CHANGE, SHOP_DATE_ADDED, SHOP_DATE_CHANGE, CHANGE_FLAG, DEL_FLAG) SELECT 1, NULL, -1, t_update.hersteller_name, NULL, NOW(), NULL, NULL, 'Y', 'N' FROM t_update JOIN hersteller ON t_update.HERSTELLER_NAME = hersteller.HERSTELLER_NAME WHERE hersteller.HERSTELLER_ID IS NULL
Das gleiche nochmal, aber mit anderer Join-Syntax (finde ich in dem Fall angenehmer zu lesen)
Code sql:1 2 3
INSERT INTO hersteller (shop_iD, Hersteller_ID, ADDR_ID, HERSTELLER_NAME, HERSTELLER_IMAGE, LAST_CHANGE, SHOP_DATE_ADDED, SHOP_DATE_CHANGE, CHANGE_FLAG, DEL_FLAG) SELECT 1, NULL, -1, t_update.hersteller_name, NULL, NOW(), NULL, NULL, 'Y', 'N' FROM t_update, hersteller WHERE t_update.HERSTELLER_NAME = hersteller.HERSTELLER_NAME AND hersteller.HERSTELLER_ID IS NULL
-
Super, vielen Dank für deine Hilfe.
Ähnliche Themen
-
mysql INSERT INTO Problem
Von buzzom im Forum PHPAntworten: 3Letzter Beitrag: 28.06.08, 15:35 -
mysql insert problem
Von luchs3 im Forum PHPAntworten: 5Letzter Beitrag: 29.05.06, 16:11 -
[VBNET]Problem mit MySQL INSERT
Von port11 im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 10.02.05, 10:03 -
MySQL - Insert-Problem
Von NetPerformance im Forum PHPAntworten: 7Letzter Beitrag: 20.04.04, 18:08 -
MySQL - Insert Problem !
Von NetPerformance im Forum PHPAntworten: 2Letzter Beitrag: 19.04.04, 16:07





Zitieren


Login





