(X, a1), (x, a2), (x, a3) Tupel finden

Ludwigmller

SQL-Guru
Beiträge
171
Hallo,
Ich möchte Tupel finden die dem Schema
(X, a1), (x, a2), (x, a3) gleichen. X ist unbekannt. Die Relation speichert eine Gruppenzugehörigkeit (GruppenID, ObjektID). Ich möchte verhindern dass mehrere Gruppen mit gleichen Objekten existieren.
 
Zuletzt bearbeitet:
Werbung:
Was ist a? Auch unbekannt / Parameter?
Code:
..where (GruppenID, ObjektID) = (:x,:a)
Ob das in mySQL geht, weiß ich nicht, dann als Workaround:
Code:
..where GrupppenID = :x and ObjektID =:a

Ansonsten wäre noch die Frage, wie/warum Du die finden willst. Weil Datenmüll in der Tabelle steht? Weil keiner rein soll?
Soetwas regelt man sachgemäß über Primär- und Fremdschlüssel oder über Unique Constraints und zugehörige Indizierung.
 
A1-a3 sind bekannt. Es soll bspw. verhindert werden, dass wenn es die Gruppe / Tupel (1, 1), (1,2), (1,3) gibt, keine neue Gruppe (2,1), (2,2), (2,3) gibt. (2,2), (2,3) dürfte es aber geben.
 
Code:
test=# create table l(d int, o int[]);
CREATE TABLE
test=*# create unique index on l (o);
CREATE INDEX
test=*# insert into l values(1, array[1,2,3]);
INSERT 0 1
test=*# insert into l values(2, array[2,3]);
INSERT 0 1
test=*# insert into l values(2, array[1,2,3]);
ERROR:  duplicate key value violates unique constraint "l_o_idx"
DETAIL:  Key (o)=({1,2,3}) already exists.
test=*#

so?
 
A1-a3 sind bekannt. Es soll bspw. verhindert werden, dass wenn es die Gruppe / Tupel (1, 1), (1,2), (1,3) gibt, keine neue Gruppe (2,1), (2,2), (2,3) gibt. (2,2), (2,3) dürfte es aber geben.
Ok, also Tupel vergleichen geht prima mit der gezeigten Syntax von Postgres. Aber das hier würde ich nicht Tupel nennen, zumindest nicht der vom Vergleich betroffene Teil der Tupel, deren kombinierter Einzelwert a ja offenbar verglichen werden muss.
Kannst Du eine Tabellenbeschreibung dazu liefern?
Oder Du beschreibst mal etwas blumiger den Sachverhalt, vielleicht gibt es ja bessere Wege.
 
Die Tabelle besteht tatsächlich nur aus den beiden Werten und einer unique ID.
Sie ordnet Einzelfläche einer Flächengeuppe zu. So gehören im Beispiel oben die Flächen 1,2 und 3 zur Gruppe 1. Die Attribute der Flächen stehen in einer eigenen Tabelle auf die der Fremdschlüssel der hier besprochenen Tabelle referenziert.
 
Das könnte noch ausführlicher sein. Wieviele a gibt es minimal, maximal?

Bei Flächen fällt mir noch GIS ein, eine 2D, 3D Erweiterung, die Überlappungen, Einschlüsse usw. berechnet, verlgeicht, etc.
Ich kenne mich damit aber nicht aus, fraglich ob es hier Verfahren für Dein Problem gibt, die es erlauben geometrisch zu arbeiten und das auf die ID abzubilden.
Es gibt aber hier Foristen, die sich damit auskennen. mySQL ist da aber mit solchen Funktionen nicht sehr gesegnet, höchstens die "neueste" Version.
 
Das wollte ich eigentlich gesagt haben...
Minimal ist es eine, sprich eigentlich keine Gruppe, dennoch ist jede Fläche die in der DB eine Rolle spielt auch in einer Gruppe alleine. Das ganze sollte so ausgelegt sein dass beliebig viele Flächen einer Gruppe zugeordnet werden können, tatsächlich wird es aber sehr wahrscheinlich nicht mehr als 20 Flächen pro Gruppe geben.
Die genauen GPS Daten sind (derzeit noch) nicht bekannt.
 
Werbung:
Das klingt nach einem neuen Projekt.
Wenn Du "sogar" GPS Daten hast (odeor haben wirst) und aus vielen anderen Gründen würde ich Dir dringend raten, Dir Postgis anzusehen und es zu nutzen und damit auf Postgres zu wechseln.

Aus technischen Gründen und aus Informationsmangel kann ich allerdings nicht weiterhelfen bei diesem Problem. Es wäre sinnvoll, den vorliegenden Anwendungsfall und andere zu beschreiben, dann kann (ich zumindest) besser helfen. Dazu wäre ein klassisches Datenmodell oder ein logisches oder auch ein Klassenmodell hilfreich. Allein die Frage, 1, 2, 3 oder noch mehr, minimal, maximal würde in einem Datenmodell ersichtlich sein, wenn es ein richtiges gäbe. Ohne dies hilft eher eine Beschreibung des fachlichen Problems.
 
Zurück
Oben