Erbitte Hilfe beim Einfügen von Daten

wernho

Benutzer
Beiträge
8
Folgende Situation:
Access: Tabelle Rezepte mit einigen Feldern, darunter Rezeptname und Zutaten. Das Feld Zutaten ist relativ groß und die Tabelle beinhaltet ca. 8.000 Datensätze.
Die Tabelle wird für ein Visual Basic 6 Programm benötigt, welches ich nun ein wenig mit MySQL beschleunigen möchte. Verwendet wird xampp, wobei Apache und MySQL gestartet ist.
Das Problem war, dass ich die Tabelle nicht mit phpMyAdmin importieren konnte.
Daher habe ich die Tabelle ohne Feld Zutaten in ein .csv exportiert und das ist nun in MySQL drinnen. Die Zutaten konnte ich auch nicht auf einmal importieren, da jedesmal Fehlermeldung, aufgeteilt auf 4x csv hat es dann geklappt.
Beide Tabellen haben die Felder ID und die Tabelle Zutaten hat dann noch das Feld Zutaten dabei. Das Feld Zutaten wurde in die Tabelle Rezepte (in MySql) dazugefügt.
Jetzt habe ich die beiden Tabellen: tblRezepte (mit leerem Feld Zutaten) und die Tabelle tblZutaten mit dem Feld Zutaten, beide haben noch das Feld ID (Primärschlüssel).
Also: in MySQL gibt es
- die Tabelle "tblRezepte" mit den Feldern ID, AufCD, Rezeptname, Zutaten ...
- Die Tabelle "tblZutaten" mit den Feldern ID, Zutaten
Hoffentlich habe ich mich verständlich ausgedrückt, ist eine kleine Schwäche von mir, sorry.

Was ich leider nicht hinbekomme, da jedesmal ein Fehler kommt ist, mittels UPDATE das Feld Zutaten der Tabelle tblRezepte zu befüllen.
SQL-Statement:
SQL:
UPDATE tblrezepte set tblrezepte.Zutaten = tblzutaten.Zutaten WHERE tblrezepte.ID = tblzutaten.ID
Fehler #1054: Unbekanntes Tabellenfeld 'tblrezepte.ID' in where clause

Ist ein Kundiger bitte so nett, mir bei meinem Problem zu helfen?
Danke im Voraus und LG aus Österreich
 
Werbung:
Code:
postgres=# create table ta(id int primary key, name text);
CREATE TABLE
postgres=# create table tb(id int primary key, name text);
CREATE TABLE
postgres=# insert into ta values (1, 'foo');
INSERT 0 1
postgres=# insert into ta values (2, 'bar');
INSERT 0 1
postgres=# insert into ta values (3, 'batz');
INSERT 0 1
postgres=# insert into tb (id) values (1);
INSERT 0 1
postgres=# insert into tb (id) values (2);
INSERT 0 1
postgres=# insert into tb (id) values (3);
INSERT 0 1
postgres=# select * from ta;
 id | name 
----+------
  1 | foo
  2 | bar
  3 | batz
(3 rows)

postgres=# select * from tb;
 id | name 
----+------
  1 | 
  2 | 
  3 | 
(3 rows)

postgres=# update tb set name=ta.name from ta where tb.id=ta.id;
UPDATE 3
postgres=# select * from tb;
 id | name 
----+------
  1 | foo
  2 | bar
  3 | batz
(3 rows)

postgres=#

Dein Tabellendesign scheint kapott zu sein, und die Wahl mit MySQL .... , na ja, lassen wir das.
 
Danke, aber ???
Sorry, aber ich verstehe Deinen Post nicht, habe schon länger nicht mehr mit SQL gearbeitet.
Ich weiß nicht, was "postgres" ist oder macht und ich weiß auch nicht, welches System das ist. Irgendwie kommt es mir bekannt vor, ist aber schon ewig her.
Sorry, bin kein Guru so wie Du.

Wie kommst Du darauf, dass mein Tabellendesign kaputt ist?

Und warum ist die Wahl von MySQL schlecht?
Ich arbeite mit Windows 10 und habe keinen Server. Bzw. glaube ich, wenn MySQL auf meinem Windows 10 läuft, ist es schneller. Ich könnte ja auch auch meinen Webspace zugreifen, dort habe ich auch MySQL zur Verfügung, aber lokal sollte es doch schneller sein, weil der Umweg übers Internet ja wegfällt.
Zumindest habe ich mir das so gedacht. Aber wie gesagt, ich bin darin kein Profil und lasse mir gerne auch etwas sagen. Lerne gerne trotz meines Alters von 64 etwas dazu.

Aber im Moment interessiert mich die Fehlermeldung.

Wobei ich auf im Zuge dieses Forums auf LOAD DATA (LOCAL) INFILE gesotßen, was ich mir auch gerade ansehe. Weiß nur noch nicht, wo ich das eingeben muss. Eventuell blöde Frage: kommt das ins SQL-Statement im phpMyAdmin rein?
 
'postgres' ist eine Datenbank, die bei der Installation von PostgreSQL automatisch angelegt wird. Was ich gezeigt habe ist faktisch die Art und Weise, wie ich mit einem CLI (Command Line Interface), konkret psql, mit der Datenbank spreche. Die Sprache nennt sich SQL. Ich gebe SQL-Befehle ein, die Datenbank führt diese aus und gibt mir Feedback darüber. Simpel, oder?

Deine Tabelle hat, laut Deiner Aussage, ein großes Feld 'Zutaten'. Vermutlich schreibst Du da irgenwie soweas wie '10 Eier, 1 Liter Milch und 500 Gramm Hackepeter'. Falls das so ist, dann ist es halt Murks.
 
Danke schön.
Ok, ganz so unbedarft bin ich dann auch wieder nicht.
Nur ist es halt ewig her, dass ich mit solchen Sachen gearbeitet habe, ich war Programmierer und bin aber breits in Rente.
SQL Befehle sind mir natürlich ein Begriff, konnte halt nichts mit "progres" anfangen. Die Befehle habe ich schon verstanden. 2 Tanellen anlegen, befüllen und dann ein Update über die tb zu fahren.
Wollte ich ja auch, nur gibt es bei mir die Fehlermeldung.

Wieso Murks? Ich möchte ja meine Zutaten, die zeitweilig wirklich umfangreich sind (z.B. mit 30 Zeilen), ja irgendwie abrufen.
Welche einfachen Möglichkeiten habe ich denn da? Denn zu kompliziert sollte es nicht werden.
Denn mein VB-Programm läuft ja, nur möchte ich ein wenig an der Geschwindigkeit schrauben und daher von Access nach MySQL wechseln.
Ist nicht wirklich wichtig, aber mir macht Programmieren immer noch Spaß und ich möchte geistig fit bleiben und mich hat auch ein wenig der Ehrgeiz gepackt, dass ich das hinbringen möchte.

Und was bitte wäre die Alternative zu MySQL? Für Windows 10.
 
wie man es, grob geschildert, richtig macht:

Code:
postgres=# create table rezepte(id int generated always as identity primary key, name text);
CREATE TABLE
postgres=# create table zutaten(id int generated always as identity primary key, name text);
CREATE TABLE
postgres=# create table rezept_zutat(r_id int references rezepte, z_id int references zutaten);
CREATE TABLE
postgres=#

Das sind also 3 Tabellen, die miteinander über Foreign Keys verbunden sind. Das ist natürlich so noch unvollständig, es fehlen z.B. die Mengenangaben.


Windows auswählen und infach installieren...
 
Ahhh, danke, jetzt bin ich ein wenig schlauer.

PostgreSQL werde ich mir überlegen, danke.

Und das mit den 3 Tabellen habe ich ja eigentlich schon, die dritte kann ich mir ja sparen, dann die ID's der Tabellen Rezepte und Zutaten sind gleich. Heißt: z.B. die ID 1566 ist in beiden Tabellen gleich, da ja in Access das in einer Tabelle war, von mir aber dann getrennt in 2 Tabellen exportiert wurde, die jetzt beide an der gleichen Stelle (gleiche ID) die zusammengehörigen Daten haben.

Und Du hast natürlich recht, ich hatte mal eine kompliziertere Datenbank mit 15 Tabellen, die untereinander verbunden waren. Schön langsam kommen die Erinnerungen wieder.

Und im VB-Programm kann ich ja die Ausgabe der Daten mittels einer Abfrage, die auf beide Tabellen zugreift, bewerkstelligen.

Aber nachdem mich trotzdem der Ehrgeiz gepackt hat, möchte ich doch noch versuchen, eine einzige Tabelle zu erzeugen, obwohl ich schlußendlich dann doch mit 2 Tabellen arbeiten werde.

Habe übrigens die SQL-Abfrage jetzt angepasst in:
SQL:
UPDATE tblrezepte SET Zutaten = tblzutaten.Zutaten FROM tblzutaten WHERE tblrezepte.ID = tblzutaten.ID
Jetzt kommt die Fehlermeldung:
#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'FROM tblzutaten WHERE tblrezepte.ID = tblzutaten.ID'
 
Aber nachdem mich trotzdem der Ehrgeiz gepackt hat, möchte ich doch noch versuchen, eine einzige Tabelle zu erzeugen
Und genau das ist halt Murks.

Code:
postgres=# insert into rezepte (name) values ('Plinsen');
INSERT 0 1
postgres=# insert into zutaten (name) values ('Mehl');
INSERT 0 1
postgres=# insert into zutaten (name) values ('Eier');
INSERT 0 1
postgres=# insert into zutaten (name) values ('Zucker');
INSERT 0 1
postgres=# insert into rezept_zutat values (1,1);
INSERT 0 1
postgres=# insert into rezept_zutat values (1,2);
INSERT 0 1
postgres=# insert into rezept_zutat values (1,3);
INSERT 0 1
postgres=# select r.name, z.name from rezept_zutat rz left join rezepte r on rz.r_id=r.id left join zutaten z on rz.z_id = z.id;
  name   |  name  
---------+--------
 Plinsen | Mehl
 Plinsen | Eier
 Plinsen | Zucker
(3 rows)

postgres=# select r.name, string_agg(z.name,', ') from rezept_zutat rz left join rezepte r on rz.r_id=r.id left join zutaten z on rz.z_id = z.id group by r.name;
  name   |     string_agg     
---------+--------------------
 Plinsen | Mehl, Eier, Zucker
(1 row)

postgres=#
 
Ja, ok, ist Murks.
Trotzdem juckt es mich in den Fingern, den Murks zu machen, obwohl ich ihn nicht brauche :)

Danke für Deine Hilfe. Und wenn ich es nicht hinbekomme, geht davon die Welt auch nicht unter.

Übrigens die Abfrage der beiden Tabellen war nett, aber das bringe ich schon hin.
 
Danke für Deine Hilfe. Und wenn ich es nicht hinbekomme, geht davon die Welt auch nicht unter.
Soweit ich das verstanden habe, geht es um ein Hobby. Es gibt nichts, was Dich treibt, außer das es "dich juckt". Wieso lässt Du Dich nicht "gehen" und machst es richtig gut, auch im "Motorraum"?
Man kann aus verschiedenen Perspektiven argumentieren. Professionalität usw. ... trifft für Dich nicht zu. Aber gerade wenn man Zeit und Lust hat, warum dann nicht richtig? (Dass Du Access weggeworfen hast, zeigt jedenfalls einen guten Riecher)

Cool wird es doch dann, wenn man nicht bloß One Way Paletten upcyclet und neon lackiert.
 
Wie gesagt, ich bin Rentner und war Programmierer.
Und nachdem ich ein sehr fauler Mensch bin, mache ich in der Rente gar nichts mehr außer ein wenig Gartenarbeit.
Meine Hobbies sind Computer und Fernseher und mit diesen beiden verbringe ich meine Tage und Nächte. Denn mit dem Motorradfahren habe ich vor einem Jahr aufgegeben. Meine letzte war eine Suzuki GSX-R 750 :)
Mein momentanes Ziel ist es, mit Visual Basic mal die Verbindung zu MySQL herzustellen. Wenn das gelungen ist, dann werde ich die mein Rezepte-Programm mal verbinden und bin schon gespannt, ob der Geschwindigkeitsunterschied merkbar ist.

Du hast natürlich recht, ich sollte es besser machen.
Aber das kommt Schritt für Schritt, eines nach dem Anderen.
Bis zur Vollendung mit der Installation von PostgreSQL.
Aber ich habe Zeit, micht drängt ja nichts.
 
Das kann ich alles gut verstehen. Pädagogisch wertvoll ist der Start mit mySQL jedoch leider nicht, man lernt weiter weg von Standard und wird auch in der Community bzw. durch viele veraltete, aber verbreitete Beispiele oft auf die Spur von unnötigen Workarounds gebracht.
Würdest Du jemand das Üben mit RC Modellen empfehlen, wenn sein Ziel ist, eine japanische Rennmaschine zu beherrschen?
(Zugegeben, der Vergleich hinkt ein wenig, mir fällt grad kein passenderer ein.)

Viel Spaß und gutes Gelingen!
 
Naja, lernen ist es ja nicht ganz, denn ich habe ja schon Erfahrung mit SQL. Ist halt nur schon länger her und ich muss mich wieder daran erinnern.
Ok, ich war kein solcher Profi, hatte aber doch etwas mehr als Grundwissen.

Übrigens ist mir der Transfer der großen Tabelle mit Rezepten samt Zutaten nun doch noch gelungen: ich habe es mit Access 2010 mittels Export ODBC geschafft.
Aber eines wundert mich jetzt schon sehr stark:
Der Aufruf des SQL-Statements zeige Daten tblRezepte an und nimm die Zutaten von tblZutaten dauert doch ein paar Sekunden, das Aufrufen der Tabelle, wo die Zutaten enthalten sind, geht blitzschnell.

Übrigens ist es meines Erachtens nicht notwendig, da die Tabelle Rezepte nur ein paar Felder hat, wobei einige gar nicht gebraucht werden. Ich komme mit 6 Feldern aus. Aber da kann ich mich irren, ist schon lange her.
 
Werbung:
Ok, ok!
Projekt PostgreSQL wird bald gestartet :)

Aber jetzt, wo Du mich drauf hinweist: die Einzel-Tabellen haben keinen primary key, die große Tabelle hat ihn aber schon. Das dürfte es sein.
 
Zurück
Oben