Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#8

AW: Unique bei 4 verschiedenen Feldern

  Alt 15. Jan 2014, 14:45
Ohh
Mir fällt keine guter Titel ein sorry.
Ich habe vier Felder

Delphi-Quellcode:
 ZTable1ORDER1 : TLargeintField;
 ZTable1ORDER2 : TLargeintField;
 ZTable1ORDER3 : TLargeintField;
 ZTable1ORDER4 : TLargeintField;
und möchte das die Datenbank die vier Felder auf Unique überprüft. Also ob der eingegebene Wert schon vorhanden ist.

Also wenn ich ZTable1ORDER1.Value = 5 und ZTable1ORDER3.Value = 5 das die Datenbank dann meckert.
Bitte ein paar mehr Beispiele, damit erahnbar wird, was Du meinen könntest.
Code:
    ZTable1ORDER1.Value = 5 
and ZTable1ORDER2.Value = beliebiger Wert
and ZTable1ORDER3.Value = 5 -> Fehler
and ZTable1ORDER4.Value = beliebiger Wert

    ZTable1ORDER1.Value = 5 
and ZTable1ORDER2.Value = beliebiger Wert
and ZTable1ORDER3.Value = alles außer 5 -> ok
and ZTable1ORDER4.Value = beliebiger Wert
Will meinen: wenn ZTable1ORDER1.Value und ZTable1ORDER3.Value identische Werte aufweisen, dann ist das ein Fehler, die Werte von ZTable1ORDER2.Value und ZTable1ORDER4.Value sind bei der Prüfung irrelevant.

Dann wäre himitsus Ansatz dahingehend abzuändern:
SQL-Code:
CREATE TABLE irgendwas (
  ZTable1Order1 INTEGER,
  ZTable1Order2 INTEGER,
  ZTable1Order3 INTEGER,
  ZTable1Order4 INTEGER,
  ..
  CONSTRAINT uk_ZTable1Order UNIQUE (ZTable1Order1, ZTable1Order3)
)
ist aber gemeint:
Code:
    ZTable1ORDER1.Value = 5 
and (ZTable1ORDER2.Value = 5 
or ZTable1ORDER3.Value  = 5
or ZTable1ORDER4.Value  = 5) -> Fehler

    ZTable1ORDER1.Value = 5 
and (ZTable1ORDER2.Value = alles außer 5
or ZTable1ORDER3.Value = alles außer 5
or ZTable1ORDER4.Value = alles außer 5) -> ok

    ZTable1ORDER1.Value = 5 
and (ZTable1ORDER2.Value = alles außer 5
or ZTable1ORDER3.Value = 5
or ZTable1ORDER4.Value = 5) -> Fehler
Will meinen: Wenn eine Zahl mehr als einmal in einer beliebigen Kombination der Spalten vorkommen könnte, wäre dies ein Fehler.
ZTable1ORDER1 ZTable1ORDER2 ZTable1ORDER3 ZTable1ORDER4 Fehler
5alles außer 5alles außer 5alles außer 5nein
55alles außer 5alles außer 5ja
5alles außer 55alles außer 5ja
5alles außer 5alles außer 55ja
alles außer 55alles außer 5alles außer 5nein
alles außer 555alles außer 5ja
alles außer 55alles außer 55ja
...............
Dann wäre himitsus Ansatz dahingehend abzuändern:
SQL-Code:
CREATE TABLE irgendwas (
  ZTable1Order1 INTEGER,
  ZTable1Order2 INTEGER,
  ZTable1Order3 INTEGER,
  ZTable1Order4 INTEGER,
  ..
  CONSTRAINT uk_ZTable1Order1 UNIQUE (ZTable1Order1, ZTable1Order2)
  CONSTRAINT uk_ZTable1Order2 UNIQUE (ZTable1Order1, ZTable1Order3)
  CONSTRAINT uk_ZTable1Order3 UNIQUE (ZTable1Order1, ZTable1Order4)
  CONSTRAINT uk_ZTable1Order4 UNIQUE (ZTable1Order2, ZTable1Order3)
  CONSTRAINT uk_ZTable1Order5 UNIQUE (ZTable1Order2, ZTable1Order4)
  CONSTRAINT uk_ZTable1Order6 UNIQUE (ZTable1Order3, ZTable1Order4)
)
sofern die Datenbank mehrere Constraints auf einer Tabelle zulässt.

Ich gehe dabei davon aus, dass die Zahl 5 als Platzhalter für eine beliebige Zahl steht und nicht explizit als abzufragender Wert gemeint ist.

Ist das verständlich, was ich möchte ?
leider nein.
  Mit Zitat antworten Zitat