PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL: Tabellenwerte abhängig von anderen


crazyRaccoon
2008-09-30, 20:56:54
Es ist eine Tabelle mit den Spalten a, b und c gegeben.

Die Werte der in den Spalten a und b sind vorgegeben.

Nun will ich, dass die Werte aus Spalte c sich in Abhängigkeit von Spalte a und b ergeben, und zwar automatisch, sobald ein neuer Datensatz eingetragen wird.

Die Werte in Spalte c sollen sich als Konkatenation von a und b ergeben.

Bsp.

a | b | c
----------------
"1" "2" "12"



Wie bekommt man sowas hin? Ich kam auf das SQL-Statement nicht drauf.
Helfen Constraints weiter?

wintermute
2008-09-30, 21:20:22
Kannst du dafür beim SQL-Server nicht einen Trigger verwenden?
http://msdn.microsoft.com/en-us/library/aa258254(SQL.80).aspx

Gast
2008-09-30, 22:58:54
Es ist eine Tabelle mit den Spalten a, b und c gegeben.

Die Werte der in den Spalten a und b sind vorgegeben.

Nun will ich, dass die Werte aus Spalte c sich in Abhängigkeit von Spalte a und b ergeben, und zwar automatisch, sobald ein neuer Datensatz eingetragen wird.

Die Werte in Spalte c sollen sich als Konkatenation von a und b ergeben.

Bsp.

a | b | c
----------------
"1" "2" "12"



Wie bekommt man sowas hin? Ich kam auf das SQL-Statement nicht drauf.
Helfen Constraints weiter?

Wozu bringt man weitere Redundanz in die DB?

samm
2008-09-30, 22:59:00
Trigger gehen. Allerdings: Was nützt dieses Feld? Ist ja keine zusätzliche Informationen. Stört es die Performance dermassen, in einer entsprechenden Abfrage die beiden Felder zusammenzuhängen?

kloffy
2008-10-01, 00:19:49
CREATE TABLE t (col1 VARCHAR(100), col2 VARCHAR(100));
CREATE VIEW v AS SELECT col1, col2, CONCAT(col1, col2) AS col3 FROM t;
SELECT * FROM v;

BoneDaddy
2008-10-01, 08:33:02
Was macht es für einen Sinn die Felder zusammenzusetzen, wenn die Daten schon in Feld A und B stehen?

crazyRaccoon
2008-10-01, 13:20:03
Trigger war das Stichwort, damit hat es jetzt geklappt (mit "ON INSERT und "ON UPDATE"...), danke.

Wegen der Redundanz:
Es stimmt schon, dass ich die Spalte 'c' zur Laufzeit aus 'a' und 'b' zusammensetzen könnte.
In diesem Fall fand ich es aber eleganter, die Daten fertig in der DB zu haben um direkt darauf zugreifen zu können, als ständig jedesmal ein CONCAT-Statement absetzen zu müssen.

Findet euch damit ab :tongue:

Eruphus
2008-10-01, 14:23:56
Wegen der Redundanz:
Es stimmt schon, dass ich die Spalte 'c' zur Laufzeit aus 'a' und 'b' zusammensetzen könnte.
In diesem Fall fand ich es aber eleganter, die Daten fertig in der DB zu haben um direkt darauf zugreifen zu können, als ständig jedesmal ein CONCAT-Statement absetzen zu müssen.

Findet euch damit ab :tongue:

Ich will deine Methode nicht in den Dreck ziehen;
Du solltest dir aber im klaren darüber sein, das das schon die ersten drei Normalformen für relationale Datenbanken verletzt...

CrazyIvan
2008-10-01, 22:19:47
Eine Alternative zu "jedes mal ein CONCAT Statement nutzen" wäre es, eine View anzulegen, die Dir Spalte c bereitstellt. Diese View könntest Du dann nutzen, als wäre sie eine physische Tabelle.