inQuake Forum - mehr braucht man nicht!
fc bayern muenchen borussia dortmund  google plus ingame
Alt 22. September 2010, 10:18   #1
 
Benutzerbild von Master
Dust Puppy
 
Registriert seit: Mär 2001
Beiträge: 5.685
QLive Nick: Artifex78
Standard SQL - Kommentare erwünscht

Advertising
Hallo zusammen,

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
Was mich ein wenig daran stört, verliere ich die Zeilen aus Tabelle1 bevor ich Tabelle2 aufräumen konnte habe ich verweiste Einträge in Tabelle2 - nicht so schön.

So etwas kann man doch sicher eleganter lösen? Zum Beispiel über einen DELETE Trigger?
Master ist offline   Mit Zitat antworten
Alt 22. September 2010, 12:59   #2
 
Benutzerbild von Master
Dust Puppy
 
Registriert seit: Mär 2001
Beiträge: 5.685
QLive Nick: Artifex78
Kleines Update. Habe es jetzt über einen INSTEAD OF DELETE Trigger gelöst. Funktioniert wunderprächtig.
Master ist offline   Mit Zitat antworten
Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr.


Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0


ingame Netzwerk
Support | AGB | Probleme mit der Werbung melden
Online Werbung | Mediadaten | Unternehmen | Karriere | Presse | Impressum

© ingame GmbH, ingame™, in™ und incup™ sind eingetragene Markenzeichen der ingame GmbH. Verwendung von Inhalten nur mit schriftlicher Genehmigung.