0

Zugriff per Select auf eine verknüpfte Tabelle

Hallo zusammen,

ich importiere Kundendaten aus dem Portal etsy.com per CSV in Ninox. Diese Kundendaten möchte ich in meiner eigenen Tabelle abgleichen bzw. neu anlegen. Dazu habe ich eine Hilfstabelle "Etsy_Kunden" (Struktur s.u.) angelegt in der alle csv-Daten importiert werden. Per Skript möchte ich diese Daten in meiner Kundentabelle abgleichen oder neu anlegen.

Ich scheitere allerdings daran, dass ich nicht auf meine Länder-Tabelle zugreifen kann, die über meine Etsy-Länder Tabelle verknüpft ist.

for kunden in(select Etsy_Kunden) do
let land_etsy := kunden.'Country ID';
let land_crm := first(select 'Etsy Länder' ['Etsy ID' = land_etsy]).'Länder'.Nr;
end

Ein Beispiel: 

Etsy Kunde:

Order id: 0001
Buyer id: 100
Name: Max Mustermann
Strasse: xyz 1
PLZ: 12345
Ort: Musterhausen
Country Id: 91

Etsy Länder:
Etsy Id: 91
-> Verlinkung mit Tabelle Länder. Nr=23, Name=Deutschland

Wie komme ich auf die Nr=23 im Select?

 

Zum Hintergrund:

Ich habe 3 Tabellen:

Etsy_Kunden: Das ist meine Import Tabelle aus einer CSV-Datei mit allen Kunden Daten. Der Aufbau ist wie gefolgt: Order id, Buyer id, Name, Zusatz, E-Mail, Strasse, PLZ, Ort, Country ID

Etsy_Länder: Das Portal Etsy hat seine eigenen IDs für die Länderangaben der Kunden. In dieser Tabelle verknüpfe ich die Etsy Länder IDs mit meinen eigenen IDs. Der Aufbau wie gefolgt: Etsy id, Verlinkung zur Tabelle Länder (Nr, Name)

Länder: Meine eigene Länder Tabelle. Der Aufbau: Name, Kurzname

5 Antworten

null
    • Pascal
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Niemand mit einer Idee??? In SQL hätte ich das ruck-zuck mit einem LEFT JOIN gelöst. Irgendwie ist die Skriptsprache NX bei solchen Basics schlecht dokumentiert

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Pascal, wahrscheinlich liegt's an mir, aber ich verstehe weder dein Datenmodell noch das genaue Problem. Die vier Zeilen Code, die du oben zitiert hast, sollten eigentlich funktionieren. Ergebnis ist jeweils die Nummer des betreffenden Datensatzes aus der Tabelle 'Länder', gespeichert in der Variablen 'land_crm'. Nur, was soll jetzt damit passieren?

    Zur schnellen Überprüfung könnte man in der Tabelle 'Etsy_Kunden' ein Funktionsfeld anlegen:

    let land_etsy := 'Country ID';
    first((select 'Etsy Länder')['Etsy ID' = land_etsy]).'Länder'.Nr

    Statt der 'Nr' könnte man natürlich auch das Feld 'Name' anzeigen lassen. Der Zugriff auf die Länder-Daten scheint mir jedenfalls nicht das Problem zu sein.

    Davon abgesehen ist mir aber auch unklar, wozu es überhaupt zwei Tabellen für die Länder gibt, eine mit den IDs, die andere mit den Namen. Was spricht dagegen, daraus EINE Tabelle mit IDs UND Namen zu machen?

    • Pascal
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

    im Grunde wollte ich, wie bei SQL, einen LEFT JOIN machen. Die beiden Tabellen habe ich getrennt, weil ich nicht weiß, für wie viele Portale ich sonst noch individuelle Länder IDs anlegen muss. Entsprechend ist die Lösung getrennter Tabellen sauberer. Nach einigen Versuchen habe ich es jetzt aber aufgegeben und letztlich das so umgesetzt wie Du es vorgeschlagen hast: Ich habe einfach eine Tabelle genutzt in der Hoffnung, dass es nicht mehr werden.

    Der Code oben hat bei mir nie funktioniert, kann aber gut sein - habe ich später herausgefunden - das es am Umlaut "ä" liegt. Seitdem ich Umlaute vermeide, macht Ninox was ich will ;-)

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Umlaute in Feld- odet Tabellennamen sind eigentlich kein Problem. Man muss den Namen dann halt in einfache Anführungszeichen setzen, aber das hattest du ja gemacht. Warum der Code nicht funktioniert hat, lässt sich nicht beurteilen, wenn man nicht weiß, ob und wie die Variable 'land_crm' dann weiter verarbeitet wurde.

     

    Sofern ich mich recht erinnere, stellt "LEFT JOIN" bei SQL quasi eine indirekte Verbindung über eine dritte Tabelle her. Genau das macht im Grunde auch dein Code bzw. der des Funktionsfeldes.

     

    Und was die Ländertabelle betrifft: Die ließe sich bei Bedarf ja problemlos um weitere Felder für neue Portale erweitern.

     

    Kurzum - ich behaupte mal: Wenn man sich daran gewöhnt hat, wird mit Ninox vieles einfacher und schneller gehen als mit SQL. ;)

    • Pascal
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, echt komisch! Ich probiere es noch mal. 

     

    Bzgl. der Tabelle: Im Grunde kannst Du es ja bei kleinen Tabellen so machen. Wenn Du aber eine Tabelle mit vielen Einträgen hast, dann kann die eine Spalte mehr, die unter Umständen nur von einigen Zeilen genutzt wird, schnell zum Geschwindigkeitsproblem werden. Sowohl für (My)SQL- als auch für Ninox-Datenbanken. Ich denke bei Ninox ist z.T. viel Umgewöhnung. Ein dicker Vorteil von Ninox: Ich habe noch nie so schnell das passende Frontend gebaut.