![]() |
Datenbank: mysql • Version: 5.6 • Zugriff über: UniDAC
Hilfe bei Abfrage, bzw. Datenumstrukturierung
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') ) |
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
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')) |
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
Unter der Annahme das jedem Teil nur einer Bearbeitungsart zugeordnet ist und jede Bearbeitungsart nur einer Bearbeitungsgruppe angehören kann.
|
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
Zitat:
|
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
Zitat:
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. |
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
Zitat:
|
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
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 |
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
"not in" umgestellt als "left outer" mit Condition Outer Menge "is null"
Code:
Müsste im Prinzip so gehen, formal, ich garantiere aber nichts.
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 P.S: Ist also Dein Originalstatement ohne Optimierung oder Annahmen, nur anderes Verfahren |
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
x könnte man noch so zu join umstellen
Code:
Darf man fragen, warum das sein muss?
(
SELECT tblfeidxgrpdet.FEIndex FROM tblfeidxgrpdet, tblfeidxgrp tblfeidxgrp, (Select 'SMD B-Seite' as Gruppenname union all 'SMD L-Seite') grp WHERE tblfeidxgrp.FEIDXGRPID = tblfeidxgrpdet.FEIDXGRPID AND tblfeidxgrp.Gruppenname = grp.Gruppenname ) x Performance? Dann ist zumindest die X Umstellung in diesem Post wahrscheinlich wurscht. Neue hausinterne Datenabfrageverordnung? Einen Tabellenumbau würde ich jedenfalls wegen eine SQL Formulierung nicht in Erwägung ziehen. Vorausgesetzt, der Tabellenaufbau ist state of the art. Vermutlich kann man sowieso alle ins und not ins in joins umwandeln. |
AW: Hilfe bei Abfrage, bzw. Datenumstrukturierung
Grund der gewünschten Umstellung ist mein Reportbuilder, der mir keine Filterfunktion zur Verfügung stellt, wenn ich einen SQL-Befehl nicht automatisch (durch zusammenklicken der Tabellen und Felder via Abfrageassistent), sondern manuell erstelle. Alle bisher genannten subselects müsste ich wie meine momentane Lösung manuell eintragen.
Vielleicht müsste ich nur meine Datenstruktur ändern, um das gewünschte zu erreichen. Folgende Bearbeitungsarten müssen unterschieden werden, wobei nur die SMD-Arten bekannt sind. Gruppe SMD B-Seite hat : gu, gupr, smd2, st Gruppe SMD L-Seite hat : gul, smd2, stl Die Stücklisten haben : auf, kl, gu, gupr, uvm. Die SMD-Stücklisten bekomme ich ganz einfach durch JOINS nur die Nicht-SMD-Stückliste macht mir den Kummer. Wenn mein Reportbuilder nicht so doof wär, wär das alles kein Problem :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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