AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Hilfe bei Abfrage, bzw. Datenumstrukturierung
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei Abfrage, bzw. Datenumstrukturierung

Ein Thema von baumina · begonnen am 13. Jan 2016 · letzter Beitrag vom 14. Jan 2016
Antwort Antwort
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#1

Hilfe bei Abfrage, bzw. Datenumstrukturierung

  Alt 13. Jan 2016, 14:32
Datenbank: mysql • Version: 5.6 • Zugriff über: UniDAC
Meine Lieben,

Folgende Abfrage muss ich so ändern, dass ich ausschließlich JOINs verwenden kann. Wenn das mit der Änderung nicht so klappt, kann ich auch die Datenstruktur ändern, damit ich das hinbekomm.

Etwas vereinfacht dargestellt, sehen meine Tabellen so aus
- Baugruppen : TBLBG
- pro Baugruppe Einträge in der Stückliste : TBLPLMSL (das Feld "Bearbeitungsart" muss hier näher betrachtet werden)

- Gruppen von Bearbeitungsarten : tblfeidxgrp
- Bearbeitungsarten innerhalb der Gruppen : tblfeidxgrpdet

Daten, die die Abfrage liefern soll:
Es sollen alle Einträge aus der Stückliste angezeigt werden, bei denen die Bearbeitungsart weder in der Bearbeitungsgruppe "SMD B-Seite" noch in der Gruppe "SMD L-Seite" zu finden ist.

EDIT:
Eine Bearbeitungsart kann mehreren Gruppen zugeordnet sein.
Jedes Teil hat nur eine Bearbeitungsart.
In der Tabelle tblfeidxgrpdet sind nicht alle Bearbeitungsarten, die es in der Stückliste geben kann definiert.

Eine extra Gruppe "Nicht SMD" mit allen sonstigen Bearbeitungsarten kann ich nicht in Betracht ziehen.

Hier meine jetzige Abfrage mit SubSelect (die durch JOINs ersetzt werden muss):

SQL-Code:
SELECT *
FROM TBLBG, TBLPLMSL
WHERE TBLPLMSL.BGID = TBLBG.BGID
  AND TBLPLMSL.Bearbeitungsart NOT IN
      (SELECT tblfeidxgrpdet.FEIndex FROM tblfeidxgrpdet
                                        , tblfeidxgrp tblfeidxgrp
                                     WHERE tblfeidxgrp.FEIDXGRPID = tblfeidxgrpdet.FEIDXGRPID
                                      AND tblfeidxgrp.Gruppenname IN ('SMD B-Seite','SMD L-Seite')
      )
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (13. Jan 2016 um 15:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#2

AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung

  Alt 13. Jan 2016, 15:12
Aus naheliegenden Gründen ungetestet:

SQL-Code:
SELECT TBLBG.*, TBLPLMSL.*
FROM TBLBG
JOIN TBLPLMSL ON TBLBG.BGID = TBLPLMSL.BGID
JOIN tblfeidxgrpdet ON tblfeidxgrpdet.FEIndex = TBLPLMSL.Bearbeitungsart
JOIN tblfeidxgrp ON tblfeidxgrp.FEIDXGRPID = tblfeidxgrpdet.FEIDXGRPID
WHERE NOT (tblfeidxgrp.Gruppenname IN ('SMD B-Seite','SMD L-Seite'))
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#3

AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung

  Alt 13. Jan 2016, 15:15
Unter der Annahme das jedem Teil nur einer Bearbeitungsart zugeordnet ist und jede Bearbeitungsart nur einer Bearbeitungsgruppe angehören kann.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung

  Alt 13. Jan 2016, 15:20
Unter der Annahme das jedem Teil nur einer Bearbeitungsart zugeordnet ist und jede Bearbeitungsart nur einer Bearbeitungsgruppe angehören kann.
Genau das interpretiere ich aus den Feldern TBLPLMSL.Bearbeitungsart und tblfeidxgrpdet.FEIDXGRPID.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung

  Alt 13. Jan 2016, 15:20
Unter der Annahme das jedem Teil nur einer Bearbeitungsart zugeordnet ist und jede Bearbeitungsart nur einer Bearbeitungsgruppe angehören kann.
Ja, hab ich vergessen zu erwähnen:
Eine Bearbeitungsart kann mehreren Gruppen zugeordnet sein.
Jedes Teil hat nur eine Bearbeitungsart.
In der Tabelle tblfeidxgrpdet sind nicht alle Bearbeitungsarten, die es in der Stückliste geben kann definiert.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (13. Jan 2016 um 15:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung

  Alt 13. Jan 2016, 15:27
Eine Bearbeitungsart kann mehreren Gruppen zugeordnet sein.
Jedes Teil hat nur eine Bearbeitungsart.
In der Tabelle tblfeidxgrpdet sind nicht alle Bearbeitungsarten, die es in der Stückliste geben kann definiert.
OK, das sind dann andere Voraussetzungen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#7

AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung

  Alt 13. Jan 2016, 15:36
hallo,

ich weiss nicht ob das bezogen auf die Datenbank funktioniert, aber mein Ansatz wäre grundsätzlich wie der von Uwe. Nur das du Feld Gruppenname mittels Case Block in ein Integer umwandelts. Die Gruppen die nicht vorhanden sein dürfen, wandels du in 1 um, alle anderen in eine 0. Dann gruppierst du die Werte mit Group by, und als Abschluss dann noch die having-Klausel etwa so 'having sum(Feld)=0'

mfg
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
jobo

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

AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung

  Alt 13. Jan 2016, 16:29
"not in" umgestellt als "left outer" mit Condition Outer Menge "is null"
Code:
SELECT *
  FROM TBLBG bg
  join TBLPLMSL pm
    on bg.BGID = pm.BGID
  left join (SELECT tblfeidxgrpdet.FEIndex
               FROM tblfeidxgrpdet, tblfeidxgrp tblfeidxgrp
              WHERE tblfeidxgrp.FEIDXGRPID = tblfeidxgrpdet.FEIDXGRPID
                AND tblfeidxgrp.Gruppenname IN
                    ('SMD B-Seite', 'SMD L-Seite')) x
    on pm.Bearbeitungsart = x.FEIndex
 where FEIndex is null
Müsste im Prinzip so gehen, formal, ich garantiere aber nichts.

P.S: Ist also Dein Originalstatement ohne Optimierung oder Annahmen, nur anderes Verfahren
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 01:47 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