Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
09.11.2009, 14:37
Deathstar



Hallo zusammen,

ich versuche ein komplexes SQL-Statement zusammen zu stricken, wobei ich jedoch irgendwo einen Fehler begehe und eure Hilfe benötige:

Also Grundlage-Tabellen:
Aproben_Analyse (Felder: AprobenNr als FKEY, Methode FKEY, Wert)
Aproben_Daten (Felder: AprobenNr als PKEY von Aproben_Analyse.AprobenNr, Bezeichnung FKEY)
Rußarten (Felder: Prozess als PKEY von Aproben_Daten.Bezeichnung)
For_Methode (Felder: ID als PKEY von Aproben_Analyse.Methode, Methode, MethodenArt als FKEY)
For_Labore (Felder: ID1 als PKEY von For_Methode.MethodenArt, Labor)

Grundlegend soll ausgelesen werden:
AprobenDaten.AprobenNr
Rußarten.Prozess
For_Methode.Methode
Aproben_Analyse.Wert
For_Labore.Labor

Das klappt auch wunderbar mittels folgendem SQL-Statement:
Quellcode:SELECT AprobenDaten.AprobenNr, Rußarten.Prozess, For_Methode.Methode, Aproben_Analyse.Wert, For_Labore.Labor
FROM (Rußarten INNER JOIN AprobenDaten ON Rußarten.Prozess = AprobenDaten.Bezeichung) INNER JOIN (For_Labore INNER JOIN (For_Methode INNER JOIN Aproben_Analyse ON For_Methode.ID = Aproben_Analyse.Methode) ON For_Labore.ID1 = For_Methode.MethodenArt) ON AprobenDaten.AprobenNr = Aproben_Analyse.AprobenNr
ORDER BY AprobenDaten.AprobenNr DESC;
Im zweiten Schritt möchte ich die Abfrage erweitern und zwar wie folgt:
Zusätzlich zu den oben erwähnten Feldern soll noch eine zweite Methode samt Wert als UND/ODER kriterium abgefragt werden, sodass ich (momentan) insgesamt auf folgende Felder kommen würde:

AprobenDaten.AprobenNr (A1)
For_Methode.Methode (M1)
Aproben_Analyse.Wert (W1)
For_Labore.Labor (L1)

AprobenDaten.AprobenNr (A2)
For_Methode.Methode (M2)
Aproben_Analyse.Wert (W2)
For_Labore.Labor (L2)

Rußarten.Prozess

Sprich: Alle "AprobenDaten.AprobenNr", welche mit der Methode M1 die Analysenwerte W1 UND(!)/ODER welche zusätzlich/alternativ mit der Methode M2 die Analysenwerte W2 aufweisen können. Erstmal wäre die "UND"-Variante interessant, die "Oder" nur sekundär.

Die AprobenNr muss bei A1/M1 und A2/M2 identisch sein.

Der Wert Prozess ist bei A1 und A2 gleich,
die Werte Labor L1 und L2 können voneinander abweichen.

Um es simpel beschreiben zu können, würde ich sagen:
Zwei einzelne SQL-SELECT Abfragen zu einer zusammenführen, oder alternativ das Ergebnis der Ersten Abfrage durch zusätzliche Kriterien weiter filtern.

Alle meine tests schlugen mit SQL-Fehlern (Syntax und vorallem JOIN-Fehlern) fehl.

Wer kann da mir klarheit schaffen?

--


Dieser Beitrag wurde am 09.11.2009 um 14:41 von Deathstar bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
09.11.2009, 17:36
Deathstar



Habe schonmal einen Gedankenansatz:
quasie ne Select-Abfrage innerhalb einer select-abfrage:

SELECT ..... FROM (SELECT ... FROM .... WHERE... ORDER BY) WHERE .... ORDER BY.

So das innen quasie die erste grundabfrage steht, außen die nachfolge kriteria.

--

zum Seitenanfang zum Seitenende Profil || Suche
002
22.11.2009, 11:48
default



wenn du das query formatierst guck ich mir das an

erstmal generelle kritik, das datenbankschema ist fürn arsch, und deine beschreibung auch.

was spricht gegen?
Quellcode:Aproben_Analyse { AprobenNr FKEY->AprobenDaten.AprobenNr, Methode FKEY->For_Methode.ID, Wert}
Aproben_Daten { AprobenNr, Bezeichnung FKEY->Rußarten.Prozess }
Rußarten {Prozess}
For_Methode { ID, Methode, MethodenArt FKEY->For_Labore.ID1}
For_Labore {ID1, Labor}
dein query hab ich entweder nicht verstanden, oder du hast einen sehr komplizierten weg gefunden was einfaches zu machen, was spricht eigentlich gegen
Quellcode:SELECT
    AprobenDaten.AprobenNr,
    Rußarten.Prozess,
    For_Methode.Methode,
    Aproben_Analyse.Wert,
    For_Labore.Labor
FROM
    Rußarten
    JOIN AprobenDaten ON (Rußarten.Prozess = AprobenDaten.Bezeichung)
    JOIN Aproben_Analyse ON (Aproben_Analyse.AprobenNr = AprobenDaten.AprobenNr)
    JOIN For_Methode ON (For_Methode.ID = Aproben_Analyse.Methode)
    JOIN For_Labore ON (For_Labore.ID1 = For_Methode.MethodenArt)
ORDER BY
    AprobenDaten.AprobenNr
    DESC;
?

wenn man da sauber aliased, sollte das und/oder auch kein problem sein

--

Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst.


Dieser Beitrag wurde am 22.11.2009 um 12:30 von default bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
22.11.2009, 12:44
Deathstar



Das Datenbankschema ist für den Arsch. Ist eine Datenbank, welche damals als nicht normalisiert, aber trotzdem durchprogrammiert, mit Frontend entstanden ist.

Letztendlich hat mir auf Grund der vielen "Hausfehlern" die verschachtelte Query geholfen.

Was du aber nicht berücksichtigst ist: 2mal Methode und 2mal Wert jeweils als pärchen und Kriterium selecten.

--

zum Seitenanfang zum Seitenende Profil || Suche
004
22.11.2009, 12:49
default



macht dein query das etwa?

--

Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst.

zum Seitenanfang zum Seitenende Profil || Suche
005
22.11.2009, 12:55
Deathstar



mein zweites mit select from (select from) schon.

--

zum Seitenanfang zum Seitenende Profil || Suche
006
22.11.2009, 12:58
default



nöl nicht rum,
sondern sag erstmal an ob das query da gleiche ergebnisse wie dein innerjoin gerät bringt,
erklär nochmal was zielsetzung ist, dann machen wir weiter

--

Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst.

zum Seitenanfang zum Seitenende Profil || Suche
007
22.11.2009, 15:02
Deathstar



Wieso noch weiter Aufwand betreiben? Thema dicht.

--

zum Seitenanfang zum Seitenende Profil || Suche