AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Materialbestand berechnen

Ein Thema von Luckner · begonnen am 3. Feb 2022 · letzter Beitrag vom 17. Feb 2022
Antwort Antwort
jobo

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

AW: Materialbestand berechnen

  Alt 8. Feb 2022, 21:11
.. weitergebracht. Jetzt werde ich mich mit den Join's beschäftigen, weil so richtig habe ich die Funktionsweise eines Join's nicht verstanden.
JOIN und seine Varianten, z.B. LEFT JOIN ist eine spezifische Form von WHERE. Sie ist standardisiert und funktioniert so für verschiedene DB Hersteller identisch (nicht alle haben den vollen Standard bzw. dessen Besonderheiten umgesetzt, alle haben aber Eigenheiten jenseits des Standards, klar).

JOIN dient explizit der Verknüpfung von 2 Datenquellen, während WHERE das teilweise auch kann, hauptsächlich aber eine Filterfunktion darstellt. (Mit der Filterfunktion wird auch die Tabellenverknüpfung erreicht)

JOIN ist moderner und hat verschiedene Vorteile. Nicht unbedingt offensichtlich für Leute, die es nicht kennen: JOIN erhöht die Lesbarkeit eines Select Statements. Man kann direkt lesen, welche Tabellen verknüpft sind (und wie) und so auch leichter bemerken, wenn eine Verknüpfung fehlt oder falsch ist. Alles was nicht JOIN ist, kommt ins WHERE und filtert "nur noch" das Gesamtergebnis. Das ist bei komplexen Statements naturgemäß besonders hilfreich.

JOIN ist (oft) mächtiger als WHERE, von FULL JOIN, über LEFT, RIGHT bis FULL OUTER kann man schon sehr viel abbilden. Es gibt weitere ..

JOIN hilft der Abfrage Optimierung (je nach Hersteller). Bedeutet nichts anderes, als das damit auch die DB im SQL Statement besser erkennen kann, wie sie am besten an eine Abfrage rangeht.

Nach der Empfehlung von Delphi.Narium würde ich noch ergänzen, dass es beim SQL lernen sehr hilfreich ist, selbst mit einer DB kleine Beispiele auszuprobieren, die auch optisch / im Kopf leicht nachvollziehbar sind. Geht sogar online mit vielen DB.

https://dbfiddle.uk/?rdbms=sqlserver...86707996fcf359
Gruß, Jo
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Materialbestand berechnen

  Alt 10. Feb 2022, 13:26
Hallo Delphi.Narium, hallo jobo,

danke für die Links. Werde mich mit beiden beschäftigt. Den Link von jobo finde ich genial, weil man dort gleich einige selection's ausprobieren kann. Wird mir richtig helfen.

Vielen Dank.

Gruß, Luckner
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Materialbestand berechnen

  Alt 11. Feb 2022, 13:33
Jetzt versuche ich die Materialnummer einer Lieferanten-Nr aus einer 3. Tabelle zu zuordnen. in der Tabelle 'Material-Stamm' gibt es die Felder 'Material-Stamm.Mat-Nr' und
'Material-Stamm.Lieferanten-Nr'. Meine Erweiterung der Select-Anweisung wäre folgende:

Code:
SELECT Materialrollen.Rollennummer, Materialrollen.[Mat-Nr], SUM(Materialrollen.[Arb-Breite]  *  Materialrollen.lfm) as quadratmeter, [Material-Stamm].[Lieferanten-Nr]
FROM Materialrollen LEFT JOIN Rollenlager ON (Materialrollen.Rollennummer = Rollenlager.Rollennummer)
LEFT JOIN [Material-Stamm] ON ([Material-Stamm].[Mat-Nr] = Materialrollen.[Mat-Nr])
GROUP BY Materialrollen.[Mat-Nr], Materialrollen.Rollennummer
Bekomme jetzt den Fehler: Fehler bei der Authentifizierung.

Habe ich jetzt die eckigen Klammern fasch, oder die 2.-te JOIN-Anweisung ist hier falsch.

Gruß, Luckner
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#4

AW: Materialbestand berechnen

  Alt 11. Feb 2022, 13:41
Wenn Du Aggregatfunktionen wie SUM benutzt, gehören alle Nicht-Aggregat-Felder der Ergebnismenge ins GROUP BY, also auch [Material-Stamm].[Lieferanten-Nr].
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Materialbestand berechnen

  Alt 11. Feb 2022, 15:39
Sorry, mein Fehler. Habe den Connections String vergessen einzugeben

Mit
Code:
SELECT Materialrollen.Rollennummer, Materialrollen.[Mat-Nr], SUM(Materialrollen.[Arb-Breite]  *  Materialrollen.lfm) as quadratmeter, [Material-Stamm].[Lieferanten-Nr]
FROM Materialrollen LEFT JOIN Rollenlager ON (Materialrollen.Rollennummer = Rollenlager.Rollennummer)
LEFT JOIN [Material-Stamm] ON ([Material-Stamm].[Mat-Nr] = Materialrollen.[Mat-Nr])
GROUP BY Materialrollen.[Mat-Nr], Materialrollen.Rollennummer, [Material-Stamm].[Lieferanten-Nr]
bekomme ich jetzt einen Syntaxfehler (fehlender Operator zwischen '(Materialrollen.Rollennummer = Rollenlager.Rollennummer)
LEFT JOIN [Material-Stamm] ON ([Material-Stamm].[Mat-Nr] = Materialrollen.[Mat-Nr])'

Luckner
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.599 Beiträge
 
Delphi 7 Professional
 
#6

AW: Materialbestand berechnen

  Alt 11. Feb 2022, 16:13
Sieht eigentlich richtig aus, aber derda sagt was anderes: Multiple LEFT JOINs in MS Access Database (was mir bisher nicht bekannt war und mir fehlt die Möglichkeit es zu testen).

Wenn ich's halbwegs recht überblicke, könnte dabei sowas rauskommen:
SQL-Code:
SELECT
  Materialrollen.Rollennummer,
  Materialrollen.[Mat-Nr],
  SUM(Materialrollen.[Arb-Breite] * Materialrollen.lfm) as quadratmeter,
  [Material-Stamm].[Lieferanten-Nr]
FROM
  (
   Materialrollen
   LEFT JOIN Rollenlager ON (Materialrollen.Rollennummer = Rollenlager.Rollennummer)
  )
LEFT JOIN [Material-Stamm] ON ([Material-Stamm].[Mat-Nr] = Materialrollen.[Mat-Nr])
GROUP BY
  Materialrollen.[Mat-Nr],
  Materialrollen.Rollennummer,
  [Material-Stamm].[Lieferanten-Nr]
MS-Access <-> SQL-Standard: Zwei fremde Welten treffen aufeinander
Es ist immer wieder für eine Überraschung gut
  Mit Zitat antworten Zitat
jobo

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

AW: Materialbestand berechnen

  Alt 12. Feb 2022, 12:39
Alles weglassen, was überflüssig ist und Fehler eingrenzen.
Die Klammern in "join.. on (..) " können sowieso weg. (Außer vielleicht bei Access ..)
Alle Felder in Select Clause raus, ersetzten durch 1 oder so. Passend dazu Group By raus.
usw.
Jeweils ausprobieren, wie sich die Fehlermeldung ändert.

dann:
Die eckigen Klammern sind k... ein Spaß!
Zur Lesbarkeit wenigstens die Tabellennamen mit Alias ersetzen, ab da Aliase verwenden, wo möglich.
Du verwendest "sogar" Mischbetrieb, mit und ohne Klammern. Dabei können doofe Sachen passieren.
Eine Tabelle, die mit Klammerung erzeugt wurde, aber eigentlich, dank brauchbarer Schreibweise auch ohne funktionieren würde, funktioniert in manchen Systemen dann nur in der exakten Klammerschreibweise. Großzügige Handhabung von Groß- und Kleinschreibweise gibt es dann nicht mehr. Folge: Feld/ Tabelle nicht erkannt, Abfrage Parser macht die Grätsche. Passende Fehlermeldung Glückssache. Auch hier gilt: Keine Ahnung, was Access dazu sagt.

Auch wenn es hier zu spät ist. Meine dringende Empfehlung: ANSI Zeichensatz (nur Buchstaben, u.U. Zahlen) ohne Leerzeichen für Datenbankobjekte. Das spart viel Ärger und bringt viel Übersichtlichkeit.

OT:Was ich auch nicht verstehe, ist dann der Kontrast zwischen schicken Umlauten und Sinn entstellenenden Abkürzungen, nur um z.B. 4 Buchstaben zu sparen. Ebenso Fremdsprach Mischmash.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:35 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