Filtern auf "ist leer" in 1:1-Beziehung

cRM 12.004, Large6

Ich habe eine Ansicht „Vorgänge“, die 1:1 mit „Fahrzeuge“ verknüpft ist, das heißt, wenn ein Fahrzeug vorhanden (und eingetragen) ist.
Das Fahrzeug liefert einen Status.

image

Die Ordernummer ist der Fremdschlüssel zum Fahrzeug.

Filtere ich den Status auf „ist nicht leer“ erhalte ich
image

Filtere ich auf „ist leer“ erhalte ich
image
, also eine leere Menge.

Frage ich auf einen String ab, der direkt in der Tabelle enthalten ist (z. B. eine Bemerkung), erhalte ich die Datensätze, in denen die Tabelle leer ist (bzw. nicht leer ist), so wie erwartet. Dabei werden sowohl NULL als auch ein Leerstring als „ist leer“ interpretiert.

Mach ich was falsch? oder soll das so sein?
Kann das jemand nachvollziehen?

Danke im Voraus,
Wolfgang

Das Verhalten ist aktuell „korrekt“ so - zumindest gewollt und erklärbar. :innocent:

Filter der Filterzeile für 1:1 Felder arbeiten nur auf etwaig tatsächlich existierenden Datensätzen. D.h. eine gar nicht vorhandene Verknüpfung resultiert nicht darin, dass das Zielfeld „leer“ wäre - es gibt den Datensatz mit dem Zielfeld schlicht nicht. Sie können sich bei 1:1 Feldern immer den Halbsatz „hat einen relationalen 1:1 Datensatz, bei dem …“ davor denken, dann wird es klarer.

Warum ist das aktuell so? => Hinter den Kulissen wird das aktuell über ein JOIN gelöst. D.h. das zu untersuchende 1:1 Feld wird per JOIN an die Felder der dargestellten Ansicht „geklebt“ und dann auf die Bedingung hin untersucht. Das führt jedoch zu dem Ergebnis, dass es für Ansichtendatensätze, bei denen das wegführende Schlüsselfeld leer ist, es also GAR KEINEN 1:1 Zieldatensatz GIBT, diese dann erst gar nicht im Ergebnis sind, so dass der Datenbankserver das 1:1 Zielfeld diesbezüglich überhaupt erst gar nicht untersucht.

Aber: Da die dargestellte Zelle visuell natürlich in jedem Fall „leer“ zu sein scheint, das optisch also für Anwender:innen keinen Unterschied macht, ob der geprüfte Feldinhalt eines existierenden 1:1 Datensatzes wirklich leer ist, oder ob es gar keinen 1:1 Datensatz gibt, werden wir das Verhalten mit Version 13 ändern, so dass es hoffentlich der intuitiven Erwartung entspricht:

{Übersichtsliste/Container} In der Filterzeile berücksichtigen bei relationalen Feldern der Operator „Ist leer“ sowie die diversen „… nicht …“-Operatoren nun auch, wenn überhaupt kein relationaler Datensatz verknüpft ist und beziehen diese Datensätze als Treffer mit ein.

Ein Filter in der Filterzeile der „Kontakte“-Übersichtsliste für die Spalte „Firma.Firma“ mit der Bedingung „beginnt nicht mit ‚S‘“ liefert bspw. nun auch alle Privatkontakte, die also mit gar keiner Firma verknüpft sind und die Firma somit in der Übersichtsliste „leer“ dargestellt wird, da deren nicht vorhandene, „leere“ Firma augenscheinlich nicht mit ‚S‘ beginnt. Bislang wurden nur die Kontakte Treffer, die überhaupt mit einer Firma verknüpft waren und die aber nicht mit ‚S‘ begann.

Arbeitet der Filter mit einem INNER JOIN? Bei einem LEFT JOIN wären vermutlich alle Datensätze da und in der entsprechenden Spalte würde auch NULL zurück geliefert, was ja scheinbar als „leer“ interpretiert wird.