Bestmögliche Kombination einer WHERE Bedingung

surrendert

Neuer Benutzer
Beiträge
1
Hallo Zusammen, ich versuche schon seit Tagen das folgende abgewandelte Problem in SQL zu lösen. Vielleicht hat einer von euch so etwas bereits mal lösen müssen oder eine Idee für mich.

Es gibt eine Menge von Mitarbeitern, wobei manche gerne miteinander arbeiten möchten. Diese können sich in eine Tabelle mit den Feldern M1 und M2 eintragen.

Susi -> Petra
Susi -> Mike
Petra -> Susi
Mike -> Clara
Etc.

In diesem Fall sind Susi und Petra ein Arbeits-Paar und können nicht mehr mit anderen kombiniert werden.

Ich kann alle möglichen Kombinationen von Paaren finden, allerdings nicht die maximale Anzahl von Paaren unter der Voraussetzung, dass jede Person nur einmalig vergeben werden kann.

Vielen Dank
Chris
 
Werbung:
eine tabelle für entsprechende Arbeitskollegen erstellen
Code:
create table kombis(m1 integer, m2 integer);

eine ansicht für unser Ausschlussverfahren erstellen
Code:
create view view_arbeiter as 
select m1 from kombis
union
select m2 from kombis;

eine trigger-procedure, die uns das ganze problem löst...
Code:
create or replace function funkie() returns trigger as $$
begin
if new.m1 = view_arbeiter.m1 from view_arbeiter where m1 = new.m1
then raise exception 'sorry';
ELSE
return new;
end if;
if new.m2 = view_arbeiter.m1 from view_arbeiter where m1 = new.m2
then raise exception 'sorry';
else
return new;
end if;
end;
$$ language plpgsql;

den Trigger erstellen:
Code:
create trigger funkie before insert or update on kombis for each row execute procedure funkie();

kann (als erster Datensatz) eingefügt werden:
Code:
insert into kombis values (1, 2);

kann (weil die Nummer im vorigen Datensatz verwendet wurde) nicht eingetragen werden:
Code:
insert into kombis values (2, 1);

kann (weil die Nummer im vorigen Datensatz verwendet wurde) nicht eingetragen werden:
Code:
insert into kombis values (1, 3);

Hier kann man noch spielen, damit ein Error geworfen wird, falls man mal aus versehen 2x die selbe Person angibt, aber mache ich vl. ein anderes mal
Code:
insert into kombis values (3, 3);

Ich verwende Postgre-SQL, nur als Info ;)
 
Werbung:
Die Aufgabe beinhaltet viele mathematische Probleme. Allen voran steigt die Anzahl der möglichen Paarungen natürlich mit der Anzahl der Personen exponentiell. Das heißt wenn ich einfach anfange Zuordnungen zu machen treffe ich vielleicht nicht die ideale Aufteilung. Will ich alle erdenklichen Kombinationen auf die Anzahl der erfolgreichen Paarungen überprüfen ist das schnell nicht mehr durchführbar.

Ich denke das lässt sich nur in einem ganz kleinen Maßstaab allein mit SQL umsetzen, für größere Mengen muss man irgendwie mit mathematischen Näherungsmethoden arbeiten, ich kenne mich damit aber nicht aus.
 
Zurück
Oben