benal09
Goto Top

Verknüpfung unterschiedlicher Tabellen

Hallo und guten Tag
Mein Problem sind 2 Tabellen, die nur teilweise gleiche Felder haben, aber denoch zusammen gehören.
Es existiert eine Spezifikation für das Produkt, aber es wurden zusätzliche Prüfungen gemacht, die nun auch auf die Ausgabe sollen.

Etwa so sieht mein Problem aus
T_Spez

Prüfpunkt: / Sollwert / Definition

Prod_Nr: / 12
Länge : / 1 m / 512
Breite : / 5 m / 513

T_Resultat

Prüfpunkt / Ergebnis / Definition

Prod_ Nr: / 12
Länge: / 1.2 m / 512
Breite: / 5 m / 513
Höhe: / 7 m
Farbe : / blau
Fertig: / Ja


Bei den probierten Abfragen erscheinen jeweils nur, (zu den andern Prüfpunkten in der Messung gibt es keine Angabe in der Spezifikation)

Prüfpunkt Ergebnis Sollwert Definition
Prod_Nr : / 12 / 12
Länge: / 1.2 / 1 m / 512
Breite: / 5 / 5 m / 513

Das Ergebnis soll aber so aussehen:

Prüfpunkt / Ergebnis / Sollwert /Definition
Prod_Nr : / 12 / 12
Länge: / 1.2 / 1 m / 512
Breite: / 5 / 5 m / 513
Höhe: / 7 / Keine Angabe /(leer)
Farbe : / blau / k.A /(leer)
Fertig: / Ja / (leer) / (leer)

Keine Angabe, k.A oder leer sind gleichwertige Varianten

Select *

From T_Spez s
T_Resultat t

Where s.Prod_Nr = :Prod_Nr
and s.Prod_Nr = t.Prod_Nr
and s.Definition = t.Definition

Content-Key: 110165

Url: https://administrator.de/contentid/110165

Printed on: April 23, 2024 at 10:04 o'clock

Member: nxclass
nxclass Feb 27, 2009 at 11:49:40 (UTC)
Goto Top
Select s.*, t.*
From
    T_Spez s LEFT JOIN T_Resultat t ON (
        s.Prod_Nr = t.Prod_Nr AND (
            (
                ( s.Definition IS NULL OR s.Definition IN ('leer', 'k.A.')) AND    
                ( t.Definition IS NULL) OR t.Definition IN ('leer', 'k.A.'))  
            ) OR
           s.Definition = t.Definition
    )

.. allerdings habe ich dein Tabellen Aufbau nicht so ganz verstanden. (was sind die Spalten Bezeichnungen und was der Inhalt)
Member: Benal09
Benal09 Feb 27, 2009 at 12:05:50 (UTC)
Goto Top
Danke für die Antwort, so wie es oben steht bekomme ich diese Fehlermeldung
ORA-01730: invalid number of column names specified
Bleibt in where abschnitt nur die Angabe der Prod_Nr ?
Benal
Member: nxclass
nxclass Feb 27, 2009 at 12:09:58 (UTC)
Goto Top
.. möglich ! - kommt auf die Beziehung der Tabellen an - bei 1:1 geht das natürlich
Member: nxclass
nxclass Feb 27, 2009 at 12:14:42 (UTC)
Goto Top
(.. es gibt noch die Möglichkeit mit 'UNION' die Tabellen zu verbinden und danach zu 'GROUP'-ieren.
Damit hast du keine 'doppelten' Spalten mehr)

Mir scheint der Tabellen Aufbau auch nicht so günstig zu sein !?
Member: Benal09
Benal09 Feb 27, 2009 at 12:22:58 (UTC)
Goto Top
Die Beziehung ist nicht 1:1, und auf den Tabellenaufbau konnte ich nicht einwirken, der ist so gegeben, weil schon andere Abfragen, aber leider nicht vergleichbar darauf laufen.
Union geht nicht, aber fürs groupieren werde ich mich mal in die vorhandenen Unterlagen vertiefen, da ist was zu Aggregatsfunktionen
Member: nxclass
nxclass Feb 27, 2009 at 12:28:51 (UTC)
Goto Top
evtl musst du die Spaltennamen von Hand anpassen bzw. auswählen
SELECT
    s.*,
    t.'Höhe', /* mit ö ? */  
   ...

oder auch so:
..
   t.Höhe AS 'Höhe',  
..
Member: Benal09
Benal09 Feb 27, 2009 at 12:54:27 (UTC)
Goto Top
In meinen Tabellen sind so
Prod_Nr Resultat Definition
Länge 12 1.2 512
Breite 12 1 513
Höhe 12 5
Farbe 12 blau
Fertig 12 ja

Die Definition ist eigentlich die Prüfmethode, in der 2. Tabelle ist das Resultat der Sollwert.
nun als Überraschung habe ich erfahren, dass noch Werte aus 2 weiteren Tabellen, der Kunde und unser MA , der das Produkt gemacht hat, dazu sollen, Jetzt schaue ich mal was sonst noch kommt, aber mit der Join -Methode wird das nicht mehr gehen.
Member: nxclass
nxclass Feb 27, 2009 at 13:47:07 (UTC)
Goto Top
...
FROM
  tabelle t
    LEFT JOIN tabelle2 t2 ON ( ... )
    LEFT JOIN tabelle3 t3 ON ( ... )
    ... ,
 noch_eine_tabelle net
...

.. das kann man doch ewig fortsetzen.
(formatier mal bissel Formatting instructions in the posts )
Member: Benal09
Benal09 Mar 02, 2009 at 07:44:24 (UTC)
Goto Top
Danke, dass das mehrmals hintereinander geht, habe ich nicht gewusst, aber jetzt wird es probiert.