AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FULL OUTER JOIN zeigt nicht alle records
Thema durchsuchen
Ansicht
Themen-Optionen

FULL OUTER JOIN zeigt nicht alle records

Ein Thema von MyRealName · begonnen am 31. Okt 2017 · letzter Beitrag vom 1. Nov 2017
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: FULL OUTER JOIN zeigt nicht alle records

  Alt 31. Okt 2017, 17:09
Da GL und G in der inneren Abfrage nicht über irgendeine Bedingung verknüpft sind, wird das erstmal ein kartesische Produkt, das ist klar, dass das langsam wird und bei großen Datenmengen wird's garantiert irgendwann unerträglich langsam.

Und da im inneren Select nur Werte von G ausgegeben werden, frag' ich mich gerade, ob GL nicht einfach weg kann. (Ist vermutlich nur beim Kopieren des SQLs versehentlich übriggeblieben.)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
689 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: FULL OUTER JOIN zeigt nicht alle records

  Alt 31. Okt 2017, 17:33
Und da im inneren Select nur Werte von G ausgegeben werden, frag' ich mich gerade, ob GL nicht einfach weg kann. (Ist vermutlich nur beim Kopieren des SQLs versehentlich übriggeblieben.)
Nee, GL hat die Werte der live-datenbank während gl_ext die werte einer vorherigen Kopie haben, die sollen ja verglichen werden um Abweichungen zu finden. GL ist eine transaktionale Accounting Tabelle, wo alle Bewegungen der Buchhaltung gespeichert werden.

Ich hab jetzt was anderes probiert : Ein Left Join um die ersten 3 Fälle abzudecken und dann ein union select zu einem Select der nur GL_Ext abfragt nach Zeilen, die nicht in GL vorkommen, um den Fall 4 abzudecken.

Code:
SELECT G.ACCT,
             G.E E_Loc, G.S S_Loc, G.Tipo Tipo_Loc, G.Batch Numero_Loc, CAST(COALESCE(SUM(G.Debit-G.Credit), 0) AS Currency) Saldo_Loc,
             GE.E E_Ext, GE.S S_Ext, GE.Tipo Tipo_Ext, GE.Numero Numero_Ext, COALESCE(GE.Saldo, 0) Saldo_Ext
      FROM GL G
      LEFT JOIN GL_EXT GE ON (GE.E=G.E AND GE.S=G.S AND GE.Tipo=G.Tipo AND GE.Numero=G.Batch AND GE.Acct=G.Acct)
      WHERE G.Fecha BETWEEN '01/01/2016' AND '12/31/2016'
      GROUP BY G.E, G.S, G.Tipo, G.Batch, G.ACCT, GE.Saldo, GE.E, GE.S, GE.Tipo, GE.Numero
HAVING CAST(COALESCE(SUM(G.Debit-G.Credit), 0) AS Currency) <> COALESCE(GE.Saldo, 0)

UNION

SELECT G.Acct,
       NULL E_Loc, NULL S_Loc, NULL Tipo_Loc, NULL Numero_Loc, NULL Saldo_Loc,
       G.E E_Ext, G.S S_Ext, G.Tipo Tipo_Ext, G.Numero Numero_Ext,
       G.Saldo Salo_Ext
FROM GL_EXT G
WHERE NOT EXISTS (SELECT G1.Conteo FROM GL G1 WHERE G1.E=G.E AND G1.S=G.S AND G1.Tipo=G.Tipo AND G1.Batch=G.Numero AND G1.ACCT=G.ACCT)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: FULL OUTER JOIN zeigt nicht alle records

  Alt 31. Okt 2017, 17:42
Sehe gerade meinen Denkfehler, hatte mit hier FROM GL G ein Komma zwischen GL und G gedacht, aber G ist ja "nur" der Alias für GL.

War also Quatsch, was ich oben schrieb
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
689 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: FULL OUTER JOIN zeigt nicht alle records

  Alt 1. Nov 2017, 13:40
passiert, keine Sorge.

Die Frage bleibt aber bestehen, auch wenn ich eine Lösung gefunden habe, die zwar kein FULL OUTER JOIN nutzt und schnell ist : Sollte es denn nicht funktionieren ? Laut der Firebird Dokumentation schon, oder ?
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
781 Beiträge
 
#5

AW: FULL OUTER JOIN zeigt nicht alle records

  Alt 1. Nov 2017, 14:19
Die Frage bleibt aber bestehen, auch wenn ich eine Lösung gefunden habe, die zwar kein FULL OUTER JOIN nutzt und schnell ist : Sollte es denn nicht funktionieren ? Laut der Firebird Dokumentation schon, oder ?
Funktioniert es, wenn du
Code:
WHERE G.Fecha BETWEEN '01/01/2016' AND '12/31/2016'
durch
Code:
WHERE G.Fecha BETWEEN '01/01/2016' AND '12/31/2016' or G.Fecha is null
ersetzt?
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
689 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: FULL OUTER JOIN zeigt nicht alle records

  Alt 1. Nov 2017, 14:49
Funktioniert es, wenn du
Code:
WHERE G.Fecha BETWEEN '01/01/2016' AND '12/31/2016'
durch
Code:
WHERE G.Fecha BETWEEN '01/01/2016' AND '12/31/2016' or G.Fecha is null
ersetzt?
So funktioniert es. Sehr gut. Danke an Euch beide!

Thema geschlossen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: FULL OUTER JOIN zeigt nicht alle records

  Alt 1. Nov 2017, 14:34
Eigentlich schon, aber ich bin mir nach wie vor nicht sicher, ob hier die Vergleiche in der Where-Bedingung einen Strich durch die Rechnung machen, wenn einer der Werte = Null ist.

Hier steht ziemlich viel zum Thema: http://weblogs.sqlteam.com/jeffs/arc...ter-Joins.aspx

Eventuell ist da 'ne Erklärung dabei, warum es nicht so funktioniert, wie erwartet.
  Mit Zitat antworten Zitat
Antwort Antwort


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 are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz