




![]() |
| |
#1 |
|
Dust Puppy
| ![]() ![]() ich bin gerade dabei mich ein wenig intensiver mit SQL auseinanderzusetzen und habe hier eine kleine Aufgabenstellung bereits gelöst. Allerdings bin ich mit dem Ergebnis noch nicht zu 100% zufrieden und hoffe auf ein paar Kommentare/Verbesserungsvorschläge. Ich habe hier zwei Tabellen. Tabelle2 ist, auf Grund einer Einschränkung im Programm (max Spalten pro Tabelle), eine "Erweiterung" von Tabelle1. Die beiden Tabellen sind nicht besonders verknüpft. Findet ein Eintrag in Tabelle1 statt kommt es auch zu keinem, einem oder mehreren Einträgen in Tabelle2. In Tabelle2 korrespondiert "Label Entry No_" mit "Entry No_" in Tabelle1. Über Sinn und Unsinn dieser Methodik müssen wir hier nicht eingehen, das ist nicht auf meinem Mist gewachsen. Ziel ist es alle Zeilen älter als 1 Monat aus den beiden Tabellen zu entfernen. Dabei muss darauf geachtet werden, dass alle Zeilen in Tabelle2, die zu Einträgen in Tabelle1 gehören, sauber mit entfernt werden (es gibt keinen DELETE Trigger). Die beiden Tabellen mit den relevanten Spalten (beide Tabellen bestehen aus deutlich mehr Spalten): CREATE TABLE [dbo].[Tabelle1]( [timestamp] [timestamp] NOT NULL, [Entry No_] [int] NOT NULL, [Creation Date] [datetime] NOT NULL, ... CREATE TABLE [dbo].[Tabelle2]( [timestamp] [timestamp] NOT NULL, [Label Entry No_] [int] NOT NULL, ... Mein erster Lösungsversuch, der auch sauber funktioniert sieht so aus: Code: DELETE FROM [Tabelle1] WHERE [Label Entry No_] IN (SELECT [Entry No_] FROM [Tabelle1] WHERE [Tabelle1].[Entry No_] = [Tabelle2].[Label Entry No_] AND [Tabelle1].[Creation Date] < dateadd(mm,-1,GETDATE())); GO DELETE FROM [Tabelle1] WHERE [Creation Date] < dateadd(mm,-1,GETDATE()); GO So etwas kann man doch sicher eleganter lösen? Zum Beispiel über einen DELETE Trigger? |
| | |
![]() |
| Themen-Optionen | Thema durchsuchen |
|
|




