Wie vergleicht man einen Wert einer anderen Tabelle?
Ich komm einfach nicht weiter.
Ich habe eine Tabelle mit dem Wert "Name"
Diesen Wert möchte ich mit einer anderen Tabelle vergleichen
Tabelle2 Feldname: "Wert"
Ich habe an so etwas gedacht:
if Name = Tabelle2.Wert then true
ich weiß nicht wie man quasi die gesamte Tabelle "Tabelle" absucht um das Feld "Wert" abzugreifen.
Ziel ist es ob der Wert des Feldnamen "Name" irgendwo in "Tabelle2" im Feld "Wert" auftaucht oder nicht
Hat da jemand eine Idee?
16 Antworten
-
Was willst du danach anstellen wenn das ergebnis wahr ist? Sind die Tabellen verknüpft? So wird es schwierig was zu sagen.
Ganz grob.
Variable in der Tabelle erstellen von der aus du suchen möchtest mit dem wert für den Vergleich
let wert:= Name
Andere Tabelle durchlaufen lassen mit dem Vergleich
select Tabelle wehre vergleichsfeld = wert
Ergebniss = true oder false
Ergebniss ausgeben lassen
select Tabelle wehre vergleichsfeld = wert. Datensatz Nr
Schau mal nach select im Forum oder der Doku
-
Man sollte sowas auf keinen Fall mit einem Formelfeld machen. Und dieses erst recht nicht in einer Tabellenansicht darstellen wollen. Dabei geht jede Datenbank in die Knie.
Das genaue Ziel der Aktion liegt ja im Dunklen, aber was auch immer der Zweck sein mag: man sollte es mit einem Button machen. Und die Ausführung mit einem "do as server ... end" beschleunigen.
-
Hallo Horst. Wenn Du in der großen Tabelle ein Ja/Nein Feld anlegst , kannst Du es mit dem Script für einen Button versuchen. Wenn Du nur eine Übersicht brauchst, welches Dir die Wörter auflistet, dann das Script für ein Funktionsfeld in einem Dashboard. Gruß Mirko
Button
let greatTable := (select Tabelle1); let smallTable := (select Tabelle2).Feld2; do as server for i in greatTable do if contains(smallTable, i.Feld1) then i.('Ja / Nein' := true) end end end
Dash
let greatTable := (select Tabelle1).Feld1; let smallTable := (select Tabelle2).Feld2; let result := unique(do as server for i in greatTable do if contains(smallTable, i) then i end end end); if cnt(result) > 0 then concat(result) else "kein Treffer" end
-
said:
Was genau meinst du mit dem Button? Das ist mir nicht ganz klar.Es gibt verschiedene Möglichkeiten, Scripte auszuführen: Formelfelder, Trigger und Buttons. Formelfelder werden bei jedem Öffnen des Datensatzes ausgeführt, Trigger automatisch bei einem bestimmten Ereignis (z. B. Erstellen eines neuen Datensatzes) und Buttons manuell durch Anklicken.
Die Entscheidung für eine der Möglichkeiten hängt davon ab, WANN die betreffende Aktion, in diesem Fall die Überprüfung, durchgeführt werden soll. Einmalig für alle vorhandenen Datensätze (Button)? Und/oder jedes Mal beim Erfassen eines neuen Datensatzes mit Eingabe in das Feld 'Name' in der "kleinen" TabelleB (Trigger)? Und wo soll das Ergebnis - vorhanden Ja/Nein - erkennbar sein, in TabelleA, in TabelleB oder in beiden?
Angenommen, es soll anhand des Textfeldes 'Name' einmalig für jeden Datensatz in TabelleB ermittelt werden, ob es einen entsprechenden Datensatz in TabelleA gibt. Dann würde ich in TabelleB ein Ja/Nein-Feld namens '"Vorhanden" oder so erstellen und irgendwo(!) in der Datenbank einen Button erstellen:
do as server for i in select TabelleB do i.Vorhanden := if cnt(select TabelleA where Name = i.Name) > 0 then true else false end end end
Damit hätte man für jedem Datensatz der TabelleB ermittelt, ob der Name in TabelleA vorhanden ist mit dem Ja/Nein-Feld dauerhaft sichtbar gemacht. Das Script wird sicher einige Zeit laufen, aber es müsste eben nur ein einziges Mal ausgeführt werden.
Wenn in TabelleB außerdem auch neue Datensätze angelegt werden und dabei jedes mal überprüft werden soll, ob der angegebene Name in TabelleA bereits vorhanden ist, dann bietet sich dafür ein "Trigger nach Änderung" im Feld 'Name' an (zu finden in den erweiterten Feldoptionen) mit folgendem Code:
let myN := Name; Vorhanden := if cnt(select TabelleA where Name = myN) > 0 then true else false end
Falls das Problem damit nicht gelöst sein sollte, wäre etwas mehr Kontext hilfreich (siehe oben).
Content aside
- vor 1 JahrZuletzt aktiv
- 16Antworten
- 162Ansichten
-
6
Folge bereits