Keine eindeutige ID - zwei Spalten miteinander verbinden

Ich habe ein Tabelle mit der Spalte „External ID“, „Versionnumber“ und „Ordable“. Ich muss nun mit einem Update den Wert in der Spalte „Ordable“ auf 0 (nicht mehr bestellbar) setzten. Das Problem ist, dass die ExternalID nicht eindeutig ist. Z.B. „ExternalID“ 12425 und „Versionnumber“ 3 sowie „ExternalID“ 12425 und „Versionnumber“ 4. Ich möchte nun nur den Eintrag mit der Versionnumber 3 den Wert 0 geben. Zur Zeit haben bei Versionen den Wert in „Ordable“ 1.

Könnt ihr mir helfen, wie ich „ExternalID“ und „Versionnumber“ verbinden kann, damit ich eine eindeutige ID habe?

Kein Problem:

UPDATE tab
SET ordable=0
WHERE externalid = 12425
AND versionnumber = 3

Danke vielmal. Geht es auch, wenn ich mehere ExternalID mit je einer entsprechender Versionnummer habe? Mit eine Where In klappt es bei mir nicht…

Ich möchte eigentlich, eine ExternalID mit einer Versionnummer verbinden, damit ich viele Einträge mit einem Befehl updaten kann.

where externalid in (1,2,3,4,5)
and versionnumber = 0

so?

Vielleicht verstehe ich das Problem nicht ganz. Mit deinen angegebenen Infos setzt du Ordable auf 0:

UPDATE Tabelle SET Ordable=0 WHERE ExternalID=12425 AND Versionnumber=3

jaa, eigentlich schon. Aber ich habe mehere Versionennummer…

ExternalID 1 Versn. 1.1
ExternalID 2 Versn. 1.2
ExternalID 3 Versn. 1.3
ExternalID 4 Versn. 1.4

Kann ich auch jeder ExternalID mit der entsprechender Versn. verbinden? Dann gibts nähmlich eine eindeutige ID…

Hallo,

das Stichwort lautet: Konkatenation von Strings, also zusammenfügen von Strings
https://www.google.de/search?q=sql+string+concatenation

Neue Spalte erzeugen und mit einem Update den Wert reinschreiben lassen.

Wobei Du auch im WHERE-Statement mehrere Anforderungen mit „AND“ verbinden kannst.
"WHERE a1 = „1234“ AND a2 = „4“

so

where externalid||’-’||versionsnummer in (‚1-1.1‘,‚2-1.2‘)

oder

where (externalid = 1 and versionsnumme = 1.1) or
(externalid in (2,3,4) and versionsnumme = 1.2) or
(externalid = 5 and versionsnumme = 1.3)

Hallo Marcel,

wenn ich Deine Frage richtig verstehe, sind 2 Fragen enthalten:

  1. Ich muss nun mit einem Update den Wert in der Spalte „Ordable“ auf 0 (nicht mehr bestellbar) setzten.

  2. Könnt ihr mir helfen, wie ich „ExternalID“ und „Versionnumber“ verbinden kann, damit ich eine eindeutige ID habe?

zu 1. sollte folgende SQL-Anweisung genügen:

UPDATE Tabelle
SET „Ordable“ = 0
WHERE „Versionnumber“ = 3;

Es werden alle Zeilen mit „Versionnumber“ = 3 auf „Ordable“ = 0 geändert. Falls das nicht gewünscht ist, muss eine weitere Bedingung in die WHERE-Klausel (mit AND verknüpft).

zu 2. Was ist mit „eindeutiger ID“ gemeint?

a) eine eindeutige Wertekombination:
ALTER TABLE Tabelle
ADD CONSTRAINT CK_Eindeutige_ID UNIQUE („ExternalID“, „Versionnumber“);

b) beide Spalten als zusammengesetzter Primärschlüssel:
ALTER TABLE Tabelle
DROP PRIMARY KEY, ADD PRIMARY KEY („ExternalID“, „Versionnumber“);

Hinweis: Die SQL-Syntax muss ggf. an das DBMS angepasst werden.

Peter

Hi,
ich gehe jetzt von ORACLE aus, Hier kann man einen UNIQUE Index erstellen, der aus mehrerern Spalten besteht.
CREATE UNIQUE INDEX for (External_ID,Versionnumber);
Die bewirkt, dass die beiden Werte in der Tabelle zusammen eindeutig sind.
Für einen Select kannst du wie folgt vorgehen:
SELECT * from
where External_ID||Versionnumber = 124253 ;
Der Trick dabei ist, durch Verkettung von 2 Feldern nur 1 Wert als Abgleich zu benutzen.
Viele Grüße
Siegwin

Super, genial. Es hat geklappt. Danek vielmal

Hallo,

hier kann ich nicht weiterhelfen.

mfg

Peter Hartmann

Hallo,

hier eine Lösung via SQL, kann auch in eine Hochsprache eingebunden werden.

UPDATE SET „Ordable“ = 0 WHERE „ExternalID“ = 12425 and „Versionnumber“ = 3 AND „Ordable“ = 1;

Hall Marcel,

falls es bei deiner Anfrage um eine Datenbank und den passenden SQL-Befehl geht:
UPDATE deineTabelle SET Ordable = 0 WHERE ExternalID = 12425 AND Versionnumber = 3 LIMIT 1 ;

Und natürlich statt „deineTabelle“ den richtigen Tabellennamen einsetzen.

Allgemein ist es immer sehr hilfreich, den Kontext (DB, Produkt, Version usw.)
anzugeben.

Gruß

Man fragt einfach beide Kriterien im WHERE ab:

update tbl set Ordable = 0 where ExternalID = 12424 and Versionnumber = 3:

In SQL müsste das so gehen:

update tabellenname set Ordable = 0
where ExternallD = 12425 and Versionnumber = 3

Für ‚tabellenname‘ den Namen der eigenen Tabelle mit den zu ändernden Daten einsetzen.

hallo,
das geht anz einfach mit einer und-verknüpfung:
… where feld1=‚text‘ and feld2=zahl …;

tschuess

Hallo, für welche DB?? Ich schreib mal für PL/SQL Oracle, für andere DB’s kann man ableiten.

Update TabellenName
set ordable = 0
where externalID = 12425
and versionnumber = 3

Tipp: Pack das obere Statement in eine Select und wenn Du nur einen Datensatz angezeigt bekommst dann wird bei dem Update auch nur einer aktualisiert.

Commit nicht vergessen …