Jump to content

ukulele

Members
  • Gesamte Inhalte

    68
  • Registriert seit

  • Letzter Besuch

Profile Fields

  • Member Title
    Newbie

Fortschritt von ukulele

Enthusiast

Enthusiast (6/14)

  • Erste Antwort
  • Engagiert
  • Erster eigener Beitrag
  • Eine Woche dabei
  • Einen Monat dabei

Neueste Abzeichen

11

Reputation in der Community

2

Beste Lösungen

  1. Du kannst mit weniger Variablen arbeiten, das ist aber auch schon alles. Was willst du sonst beim zusammenkleben von Code vereinfachen? Oder bezieht sich deine Frage auf das zusammengebaute Query? Das könnte man dann ja auch direkt und formatiert posten..
  2. Ja in diesem Fall v1 und v2, die kannst du aber beliebig nennen.
  3. Also zunächst mal habe ich mit LEFT JOINs gearbeitet so das der Hauptdatensatz deines originären Selects auf jeden Fall angezeigt wird. Dann habe jeweils zwei Join-Bedingungen weil es in der View n verknüpfte Datensätze gibt von denen ich aber nur einen bestimmten brauche. Das ganze musste in zwei verschiedene Spalten (Fol und Etik) also habe ich die View doppelt gejoint, dazu muss man zwingend mit Tabellen-Aliasen arbeiten.
  4. Du hast also originär 3 Abfragen, meinst du eventuell das hier? SELECT VBSVORDT, VBSVORZT, VBSARTTX, VBSHNDKL, VBSURSLD, VBSPALMG, VBSPMENG, VBSFPMNG, VBSLGANR, arttx, VBSKUNNR, KUNNAME, VBSFOLNR, VBSFOLET, VBSKISZT, VBSECKL, VBSSANID, VBSSANKI, v1.PARLFD2 AS FolNr, v1.PARINHA1 AS FolTxt, v2.PARLFD2 AS EtikNr, v2.PARINHA1 AS EtikTxt FROM tbl_VBS JOIN tbl_KUN ON tbl_kun.KUNNR = tbl_vbs.VBSKUNNR JOIN tbl_ART ON tbl_art.ARTNR = tbl_vbs.VBSLGANR LEFT JOIN view_PAR v1 ON VBSFOLET = v1.PARLFD2 AND v1.KEYIPAR1 LIKE 'EVARFFOLIENNUMMER%' LEFT JOIN view_PAR v2 ON VBSFOLET = v2.PARLFD2 AND v2.KEYIPAR1 LIKE 'EVARFFOLIENETIKET%' WHERE VBSADRNR = '005256' AND convert(datetime,convert(char(10),VBSVORDT,104)) BETWEEN convert(datetime,convert(char(10),getdate(),104)) AND dateadd(dd,0,getdate())
  5. Also ich verstehe den Thread nur in etwa bis Post #4, ich glaube du suchst das: SELECT VBSVORDT, VBSVORZT, VBSARTTX, VBSHNDKL, VBSURSLD, VBSPALMG, VBSPMENG, VBSFPMNG, VBSLGANR, arttx, VBSKUNNR, KUNNAME, VBSFOLNR, VBSFOLET, VBSKISZT, VBSECKL, VBSSANID, VBSSANKI, PARLFD2 AS FolNr, PARINHA1 AS FolTxt FROM tbl_VBS JOIN tbl_KUN ON tbl_kun.KUNNR = tbl_vbs.VBSKUNNR JOIN tbl_ART ON tbl_art.ARTNR = tbl_vbs.VBSLGANR LEFT JOIN view_PAR ON VBSFOLET = view_PAR.PARLFD2 AND view_PAR.KEYIPAR1 LIKE 'EVARFFOLIENNUMMER%' WHERE VBSADRNR = '005256' AND convert(datetime,convert(char(10),VBSVORDT,104)) BETWEEN convert(datetime,convert(char(10),getdate(),104)) AND dateadd(dd,0,getdate())
  6. Hier gibts eine Markierung für gelöst, im anderen Forum leider nicht.
  7. Crosspost http://www.datenbankforum.com/threads/max-und-primaerschluessel.2694/
  8. Ich bin hierrüber gestolpert, habe es aber nicht getestet. http://www.brentozar.com/archive/2008/09/finding-your-san-bottlenecks-with-sqlio/
  9. Theoretisch ist das möglich, es bedeutet aber auch viel Aufwand. Hast du bereits eine Datei erfolgreich importiert? Wie sind die Dateien auf dem Dateisystem strukturiert, individuelle Namen oder sind die irgendwie fortlaufwend abgelegt?
  10. Das ist zunächst mal normal. Das kann man ändern, ist aber nicht ganz einfach bei einer dynamischen Anzahl an Schauspielern pro Film. In diversen SQL Servern gibt es Funktionen wie GROUP_CONCAT etc. die diese Information aggregieren können. In MSSQL gibt es das so direkt leider nicht aber andere Möglichkeiten. Ein gängiger Trick nutzt XML Path, siehe hier: http://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/
  11. Bei MSSQL gibt es einen grafischen Ausführungsplan, im Management Studio gibt es dafür einen Button. Den kannst du dir ja mal für die unterschiedlichen Selects anzeigen lassen. Wenn sich ein Unterschied bemerkbar macht dann würde ich tippen das NOT IN die langsammste Variante ist.
  12. Nichts anderes habe ich geschrieben, die Betonung lag auf zusätzlich im ersten Absatz. Im zweiten Absatz plädiere ich aber für Abwägung zwischen laufendem Index oder nächtlichem oder anderweitig regelmäßigem full table scan.
  13. Dafür gibts einige Wege z.B.: SELECT a.id, a.vater, a.benutzer, a.rechner FROM beziehungen AS a LEFT JOIN beziehungen AS b ON a.id = b.vater AND a.benutzer = b.benutzer WHERE b.vater Is Null oder SELECT a.id, a.vater, a.benutzer, a.rechner FROM beziehungen AS a WHERE a.id NOT IN ( SELECT b.vater FROM beziehungen b WHERE b.benutzer = a.benutzer ) oder SELECT a.id, a.vater, a.benutzer, a.rechner FROM beziehungen AS a WHERE a.id NOT EXISTS ( SELECT 1 FROM beziehungen b WHERE b.vater = a.id AND b.benutzer = a.benutzer )
  14. Was ist denn ein "sprechender Delete-Befehl"? DELETE FROM tabelle WHERE datum <= '2015-01-01' DELETE FROM tabelle WHERE pk <= 1000 Mit einem Index auf die jeweilige Spalte der WHERE Bedingung sollten gleich schnell sein. Für mich sind die auch beide "sprechend".
×
×
  • Neu erstellen...