Autor Beitrag
DennisXX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Mi 01.02.12 23:17 
Hallo zusammen !

Ein Arbeitskollege von mir hat heute behauptet, dass er UNION oder EXCEPT/MINUS oder INTERSECT Statements in SQL gänzlich meiden würde, weil die angeblich in SQL sehr gefährlich sind bzw. negative und einschätzbare Nebenwirkungen haben können. Er konnte mir allerdings keine konkreten Beispiele dafür nennen.

Ist es tatsächlich so gefährlich, seine Ergebnissmengen vertikal mittels UNION usw. darzustellen, anstatt horizontal entsprechende JOINS durchzuführen?

Gruß
Dennis
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 02.02.12 09:32 
Ich benutze die auch gelegentlich. Bisher kenne ich nur den Nachteil, dass diese nicht so performant sind.
Versuch mal ein Union mit einem order by. :mrgreen:
Normalerweise werden dann die Daten aller SQL-Anweisungen komplett gezogen und erst mit dem Ergebnis die Sortierung gemacht. In einem View würde ich sowas auf gar keinen Fall einsetzen.

Union und ähnlich Konstrukte verwende ich daher auch nur, wenn der Weg über joins nicht oder nur sehr schwierig zu lösen ist.
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: Do 02.02.12 14:32 
UNIONs sind nicht mehr oder weniger gefährlich als andere Konstrukte in SQL (Falsch eingesetzt bekommt man halt falsche Ergebnisse oder eine langsame SQL Abfrage)
Wenn du eine Abfrage korrekt durch einen Join darstellen kannst ist das in fast allen Fällen aber die schnellste Methode die man verwenden kann und deshalb üblicherweise vorzuziehen.

Wobei mir jetzt kein Problem einfällt wo man vor der Entscheidung steht 'nehm ich jetzt einen JOIN oder einen UNION?'. Das sind 2 unterschiedliche Konstrukte für unterschiedliche Problemfälle.