PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MSSQL/T-SQL Subselect mit AND verknüpfter Bedingung liefert mehr Datensätze als erwartet
#1
Hallo,

Ich poste mal zu Beginn die Query, damit ihr wisst, worum es geht:
Code:
select
lieferscheine.* -- der Kürze halber

from
VKBelege lieferscheine

where
lieferscheine.Belegkennzeichen = 'VLL'
and lieferscheine.BelID not in ( select ReferenzBelID from VKBelege where ReferenzBelID is not null and Belegkennzeichen = 'VFR' )

order by
lieferscheine.Belegdatum desc
Ich suche quasi alle Lieferscheine, zu denen scheinbar noch keine Rechnungen erstellt wurden. Das Belegkennzeichen VLL steht für die Lieferscheine, VFR für Rechnungen.
Jeder Beleg, egal ob Lieferschein oder Rechnung hat eine eindeutige BelID. Für den Fall, daß aus einem Lieferschein bereits eine Rechnung erstellt wurde, gibt es die ReferenzBelID in der Rechnung, die der BelID des Lieferscheins entspricht.

Die Logik ist damit klar:
Code:
Selektiere alle Lieferscheine, deren BelegID in keiner ReferenzID der Rechnungen vorhanden ist.

Was mich ein wenig aus dem Konzept bringt:
So wie oben im Code, bekomme ich 796 Datensätze.
Wenn ich in dem Subselect das and Belegekennzeichen = 'VFR' entferne, bekomme ich nur noch 264 Datensätze.

Warum bekomme ich denn mehr Datensätze, wenn ich die Ergebnismenge des Subselects weiter eingrenze?

Da habe ich ein kleines Verständnis-Problem und freue mich auf erleuchtende Hinweise.
Undecided
Antworten
#2
Zitat:Warum bekomme ich denn mehr Datensätze, wenn ich die Ergebnismenge des Subselects weiter eingrenze?

Durch deine invertierte Abhängigkeit (NOT in) ist die Chance, dass in deiner Haupt Query ein Datensatz herausgefiltert wird natürlich höher bei mehr SubQuery results. D.h. desto mehr du die SubQuery einschränkst und desto weniger Zeilen sie erzeugt, desto mehr Zeilen wirst du in der HauptQuery bekommen und umgekehrt.
Antworten
#3
Verdammt... Du hast recht... Jetzt klingt's sogar logisch... Blush

Danke
Antworten


Gehe zu: