0

Datensätze aus zwei Tabellen automatisch 1:N verbinden

Ich bin heute neu hier eingestiegen und suche den besten Weg die Relation zwischen zwei importierten Tabellen "Kunde" und "Kontakt"

Jeder Kunde hat eine eindeutige KundenID

Alle Kontakte, die im alten System mit einem Kunden verbunden waren, haben den entsprechenden Wert in der Tabelle Kontakt.KundenID

Ich habe eine 1:N Relation von Kunde zu Kontakt eingerichtet.

In beiden Tabellen ist das Feld: Kunde-ID

D.h. ich möchte für jeden Kunden in Kontakt alle Datensätze selektieren, die die gleiche Kunde-ID haben und diese Kontakte mit dem Kunden verbinden.

Name der Tabellen

- Kunde

- Kontakt

Name des Feldes

- Kunde-ID

Die manuelle Verknüpfung funkioniert bestens. Aber für über 900 Kunden/Firmen und 1.800 Kontake ist das manuell natürlich aufwändig.

Und ich habe noch viele weitere Tabellen, wie z.B. Aufgaben, Abschlüsse, Angebote, Aufträge, Rechnungen etc. im alten System, für Dich die gleiche Übung vor mir habe.

9 Antworten

null
    • Torsten_Stang.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Bernd,

    vorausgesetzt, die Verknüpfung zur Tabelle 'Kunde' heißt genau so in der Tabelle 'Kontakt' dann könntest Du in der Konsole mit folgendem Code alle Verknüpfungen herstellen:

    for i in select Kontakt where 'Kunde-ID' do
       i.Kunde := first(select Kunde where 'Kunde-ID' = i.'Kunde-ID')
    end
    
      • Fox Concepts
      • Christoph.2
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Torsten Stang 😄 du warst schneller

      • Inhaber / Geschäftsführer
      • Bernd_Rutzel
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Torsten Stang Danke, das hat auf Anhieb das gewünschte Ergebnis gebracht. Die Datensätze aus beiden Tabellen sind jetzt wie geplant verknüpft.

    • Fox Concepts
    • Christoph.2
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Bernd,
    es gibt Möglichkeiten die Datensätze bereits beim Import über die Schlüssel-Definition zu verbinden. Für Deinen Fall, wenn die Daten bereits importiert sind kannst du das aber mit einer Schleife über die Console machen. Ab Besten du iterierst durch die Kontakte, welche eine Kunden-ID haben:

    let allCustomers := select Kunde;
    for k in Kontakt where KundenID != null do
        k.Kunde := first(allCustomers[KundenID = k.KundenID])
    end
    
      • Inhaber / Geschäftsführer
      • Bernd_Rutzel
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Christoph Wie würde es denn beim Import gehen? Ich möchte alle Tabellen aus einem bestehenden CRM-System übernehmen. Und habe daher noch einige weitere Imports vor mir.

      • Fox Concepts
      • Christoph.2
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Bernd Rützel Hier ist die Ninox Doku zu Import von zu verknüpfenden Daten:

      https://docs.ninox.com/en/legacy-manual/import-and-export/importing-linked-data

      In deinem Fall importierst du zuerst die Tabelle Kunde, richtest die Verknüpfung ein, und beim Import der Kontakte machst du bei der Feldzuweisung eine Zuweisung von KundenID - Kunde.KundenID

      • Inhaber / Geschäftsführer
      • Bernd_Rutzel
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Christoph Hier habe ich eine Fehlermeldung bekommen, dass in Zeile 2 Kontakt nicht erkannt wird. Ich denke es könnte daran liegen, dass das Feld 'Kunde-ID' und nicht KundenID in der Tabelle ist.

      Ich habe es mal so geändert, dann war die Fehlermeldung weg. Konnte aber nicht neu testen, da die Tabellen schon verbunden waren.

      let allCustomers := select Kunde;
      for k in select Kontakt where 'Kunde-ID' != null do
          k.Kunde := first(allCustomers['Kunde-ID' = k.'Kunde-ID'])
      end

      • Inhaber / Geschäftsführer
      • Bernd_Rutzel
      • vor 2 Jahren
      • Gemeldet - anzeigen

       Christoph - beim Testen habe ich gesehen, dass noch nicht alle Kontakte korrekt verbunden waren. Habe dann mal meinen geänderten Code laufen lassen und jetzt sieht es komplett aus.

      Dieser Ansatz scheint auch deutlich schneller zu sein, da er sich erstmal alle Datensätze aus "Kunde" einliest und bei den Kontakten nur die Datensätze berücksichtigt, die auch eine Verknüpfung zu einem Kunden haben.

      Nochmals vielen Dank

    • Inhaber / Geschäftsführer
    • Bernd_Rutzel
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Vielen Dank für Eure schnellen Antworten. Ich bin heute erst noch in Terminen. Sobald ich es ausprobiert habe, melde ich mich zurück.