Autor Beitrag
Kossy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: So 30.09.12 12:28 
Hallo !

Ich habe noch einmal eine SQL spezifische Fragen an euch. Ich weiß, dass man auf eine View eine DML Anweisung (INSERT, UPDATE oder DELETE) loslassen kann, insofern diese nicht über zu komplexe Joins oder Aggregatfunktionen verfügt.

Ich frage mich nun, ob es evtl. überhaupt möglich wäre eine DML Anweisung auf eine Subquery loszulassen (vorausgesetzt diese hat keine Aggregatfunktionen oder zu komplexe Joins).

Also bspw. so etwas:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
DELETE
FROM (SELECT tabelle1.A, tabelle1.B, tabelle2.A, tabelleB
      FROM tabelle1 INNER JOIN tabelle2
           ON tabelle1.A = tabelle2.A) tmpTabelle
WHERE tmpTabelle.spalteB = 'customer';


oder

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
UPDATE (SELECT tabelle1.A, tabelle1.B, tabelle2.A, tabelleB
        FROM tabelle1 INNER JOIN tabelle2
             ON tabelle1.A = tabelle2.A) tmpTabelle
SET tmpTabelle.SpalteB = 'account'
WHERE tmpTabelle.SpalteB = 'customer';


Viele Grüße
Kossy
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 30.09.12 14:22 
Ich beschränke mich mal auf den SQL Server(Sag demnächst bitte auf welche Datenbank du dich beziehst). Sobald dein Subselect updatebar wäre könntest du den in eine CTE packen dann geht das. Deine sind es nicht. Updatebar sind nur Abfragen mit genau 1 Tabelle im from damit für die SQL Engine die Spalten zuordbar bleiben. Und vielleicht um zu verhindern das der User die Erwartungshaltung aufbaut er könnte einen Update oder Delete schreiben der sich auf mehr als eine Tabelle bezieht. Wer sowas will sollte einen instead of Trigger schreiben mit wohl überlegter Logik.

ausblenden SQL-Anweisung
1:
2:
with test as (select * from Table1 where ID <= 10)
delete from test where ID = 1


Davon abgesehen sehe ich keinen Grund sowas zu benutzen. Nenn bitte mal einen sinnvollen Anwendungsfall.