AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL EXCEPT Ersatz

Ein Thema von FediDelPr · begonnen am 21. Dez 2018 · letzter Beitrag vom 22. Dez 2018
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

AW: SQL EXCEPT Ersatz

  Alt 21. Dez 2018, 22:29
Werden mit
Code:
EXCEPT
nicht vollständige Datensätze verglichen?
Da dürfte der "Nachbau" mit
Code:
not in
ganz schön aufwendig werden.
Aber was tut man nicht alles um zu zeigen, daß Access eine richtige Datenbank ist.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
115 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: SQL EXCEPT Ersatz

  Alt 22. Dez 2018, 00:03
In meiner Anwendung braucht tatsächlich nur eine Spalte überein zu stimmen. Die
nicht übereinstimmenden interessieren mich dann.

Auf den ersten Blick scheint die Variante mit einem (LEFT) JOIN gegenüber derjenigen
mit NOT IN wesentlicher leistungsfähiger zu sein.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: SQL EXCEPT Ersatz

  Alt 22. Dez 2018, 04:00
@80286: Ja, es werden "vollständige" Datensätze verglichen, wobei vollständig sich schlicht auf die im Select genannten Spalten bezieht (ID-artige oder FK Felder will man dort idR nicht drin haben)

Wahrscheinlich liegt hier eine Mussverständnis zur Anwendung der SQL Funktionen vor.
Not In sowie left join (mit not null) haben nichts mit Except zu tun.

Beispiel für Except:
Code:
insert into customeractive (lastname, firstname, street, city) values
('Ambach','Albert','Amtsstraße','Aachen'),
('Bertold','Belinda','Bahnhofstraße','[B]Barlin[/B]'),
('Christen','Christina','Carlsonstr','Castrop-Rauxel'),
('Düsentrieb','Daniel','Dagobertstraße','Darmstadt');

insert into customerimport (lastname, firstname, street, city) values
('Ambach','Albert','Amtsstraße','Aachen'),
('Bertold','Belinda','Bahnhofstraße','[B]Berlin[/B]'),
('Christen','Christina','Carlsonstr','Castrop-Rauxel'),
('Düsentrieb','Daniel','Dagobertstraße','Darmstadt');
--zeige neu oder geändert
select firstname, lastname, street, city from customerimport
except
select firstname, lastname, street, city from customeractive;
ergibt:
firstnamelastnamestreetcity
BelindaBertoldBahnhofstraßeBerlin
ChristinaChristenCarlsonstrCastrop-Rauxel

Except ist ein ~"exkludierendes Union"***, die Mengenlehre würde wahrscheinlich Differenzmenge sagen.
Es ist offensichtlich, dass hier keine Join Clause verwendet wird. **

(Not) In <werteliste> ist wahrscheinlich für den Einsatz von kleineren Wertelisten gedacht (enums) und entsprechend optimiert*.
(left) join dagegen für den Abgleich von "endlosen" Relationen gemacht und optimiert*.

Mit diesem jeweils speziellen Einsatzzweck ergeben sich dann ggF. Laufzeitunterschiede und evtl. sogar verfahrensbedingte Limitierungen. Ich fasse "(not) in" in SQL kaum an. Mehr als 5 Einträge im Enum, da fragt man sich doch, ob das nicht Werte sind, die in eine Tabelle gehören. Ja und lahm ist es meist auch.

* "optimiert für" ist hier jeweils idealerweise kein Stück statischer Code, sondern mehr oder weniger optimale, dynamisch gewählte Ausführungspfade vor dem tatsächlichen Start der Abfrage, jeweils mit Focus enum oder join
** an der Stelle Verweise ich mal auf den anderen aktuellen Thread "..inner joins.." und den dort bereits aufgeführten Link zu Venn Diagramms. Da kann sich jeder seine ideologische Ecke selbst aussuchen oder dazu einen neuen Thread eröffnen.
*** selbsterfundenener Begriff um die Analogien zu Union zu verdeutlichen, "Differenzmenge" dagegen ist ein echtes Mathewort(Mengenlehre).
Gruß, Jo
  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 12:14 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