Oracle 10g Express Edit. Queryanfrage und allgemeines Problem
Volker
- datenbank
0 Frank (no reg)0 Volker0 Volker0 Frank (no reg)
0 Ilja
Hallo Leute,
ich versuche mich so kurz wie möglich zu halten, aber trotzdem genug Infos zu geben zu meinem Problem. Also ich benutze Oracle 10g Express Edition und habe folgende Probleme:
Das vierte Problem hat sich gerade erledigt :-)
Also ich hoffe ihr versteht was ich meine und könnt mir irgendwie ein wenig helfen.
Einen schönen Sonntag noch,
Volker
Hi,
zu 1)
Von was möchtest du den "aktuellsten Stand"? Pro Tabelle oder insgesamt von allen Tabellen. Beschreibe deinen Wunsch mal bitte etwas genauer.
zu 2)
Nein, imho kann man keine FK auf Views zeigen lassen, in keinem mir bekannten RDBMS.
Ansonsten ... vermute ich schlechtes bzw. falsches Design.
Erstelle eine Tabelle "GEBK_ALLEGEMEINDEN", unterscheide die Datensätze darin anhand eines Attributes "Gemeinde" / "Samtgemeinde". Was auch immer letzteres ist?? Setze deinen FK so, dass du auf diese gesamte Tabelle referenzierst.
Warum hast die Tabellen in 2 physikalische Tabellen aufgeteilt? Haben sie unterschiedliche Attribute? Wenn ja, dann könntest du doch einfach auch nur die Attribute auslagern und mit einem FK auf die Gesamttabelle zurückreferenzieren?
Du hast aber nur von Feldern "KENNZAHL","NAME" geschrieben.
zu 3)
Wozu 3 Schlüssel? Du möchtest, dass die Kombination KENNZAHL, JAHR, GESCHLECHT eindeutig ist und nicht zweimal vorkommen kann? Welche bedeutung hat KENNZAHL in diesem Kontext?
JAHR hat welchen Datentyp? GESCHLECHT hat welchen Datentyp?
Evt. ist es auch eine Unzulänglichkeit des Webfrontends? Was passiert wenn du das repräsentative PL/SQL direkt hinschickst für die Erstellung der Tabelle, also quasi
CREATE TABLE blubb (
KENNZAHL numeric(19,6) NOT NULL
,JAHR numeric(4,0) NOT NULL
,GESCHLECHT numeric(1,0) NOT NULL
,CONSTRAINT blubb_pk PRIMARY KEY (KENNZAHL, JAHR, GESCHLECHT)
)
Das sollte ANSI-92 Standard SQL entsprechen. Konsultiere bitte ggf die Doku zum CREATE TABLE.
Grüsse
Frank
Hallo,
danke für beide Antworten :-)
Also mir ist schon einiges klar geworden durch eure Beiträge, aber nochmal etwas genau :
Fangen wir mit dem einfachsten Problem an, dem 2. das mit dem ForeignKey auf ein View. Ich denke die Idee daraus eine Tabelle zu machen ist sinnvoller, also aus 2 Tabellen ein View zu erzeugen. Leider ist die Struktur von einem Unternehmen übernommen, dass ich halt bearbeiten soll. Also werde ich das umbauen.
Was eine Samtgemeinde ist, wusste ich auch vorher nicht. Ist einfach eine Gemeinde, die mehrere kleine Gemeinden unter sich hat :-)
Zu Punkt 1)
Vereinfachtes Beispiel (dann kann ich das ableiten zu meinem Problem)
test1 | ident | wert test2 | ident | wert test3 | ident | wert
----------------------------------------------------------------------
| 1 | 6 | 1 | 6 | 1 | 1
| 2 | 6 | 2 | 6 | 2 | 6
| 3 | 7 | 3 | 8 | 3 | 9
Nun möchte ich eine Anfrage auf alle drei Tabellen machen, die mir für zB ident=3 den Maximalen "wert" von allen drei Tabellen anzeigt
Zu Punkt 3)
Ich denke ich sollte wirklich vom Frontend weg kommen, ist aber viel schneller :-)
Also die Kennzahl ist eine Zahl die eine Gemeinde eindeutig gepräsentiert. Das Jahr ist halt das Jahr für das die Daten in diesem Datensatz steht und das Geschlecht halt das Geschlecht :-) Die Idee sollte sowas sein wie:
Die Anzahl der Männer oder Frauen in einem bestimmten Jahr von einer bestimmten Gemeinde auszulesen.
Ich werde es mal versuchen mit deiner Idee über die Konsole.
Ich danke nochmals für die schnelle Hilfe euch beiden
Mit freundlichen Grüßen,
Volker
Okay, Problem Nummer 1 ist auch gelöst :-)
ident soll zum Beispiel 3 sein
SELECT MAX(wert)
FROM (
SELECT ident, wert FROM test1 where ident=3
UNION ALL
SELECT ident, wert FROM test2 where ident=3
UNION ALL
SELECT ident, wert FROM test3 where ident=3
);
Das ist eigentlich das, was ich gesucht hatte. Aber ohne die Hilfe hätte ich das nicht geschafft.
Danke nochmals
Servus,
sind beide Ursprungstabellen jeweils für sich von 1 an numeriert? Dann könnte das Zusammenführen unter Umständen etwas Probleme bereiten, wenn du die Kennzahlen erhalten musst.
Das mit dem maximalen Wert von einer "Kennziffer" bzw. Fakts/Measure sollte sich bei einer Überarbeitung des Datenmodells auch generell einfacher lösen lassen.
Zu deinem Problem Nr 3 ... vielleicht mag er die Spalte "Geschlecht" nicht mit aufnehmen als Composite-Key, weil sie VARCHAR ist? An der Stelle könntest du das Geschlecht auch herausnormalisieren: Eigene Tabelle mit Id, Name und dann die Id in der Ursprungstabelle mit einem FK speichern. :)
Ciao, Frank
yo,
- Nun möchte ich eine Query stellen, die mir den größten, also den neusten Stand, ermittelt.
ich vermute mal, über mehrere Tabellen hinweg ? das ist unter oracle kein problem sein. der weg hängt aber davon ab, welche information du genau haben willst, sprich reicht dir zum beispiel der maximale wert alleine oder willst du noch andere informationen gleichzeitig ermitteln/ausgeben. wenn ja wäre noch zu kläre, ob zeitgleiche datensätze berücksichtig werden sollen. ich gehe erst mal von einer lösung aus, die dir nur den maximalen zeitwert liefert.
SELECT MAX(tab.maxwert)
FROM
(
SELECT MAX(stand) AS maxwert FROM tabelle1
UNION ALL
SELECT MAX(stand) FROM tabelle2
UNION ALL
SELECT MAX(stand) FROM tabelle3
) tab
- Gibt es eine Möglichkeit über das Webfrontend von Oracle 10g Express Edition einen Foreignkey zu definieren, der aus einem VIEW kommt?
mir ist noch nicht ganz klar, was du machen willst. eine view ist einfach ausgedrückt, eine gespeicherte abfrage, trägt also selbst keine datensätze in sich, sondern indirekt nur über die tabellen, die es durch die abfrage anspricht. isofern würde ich sagen, man kann kein foreign keys in einer view anlegen, zumal der FK constraint ja dann auch auf zwei unterschiedliche tabellen verweisen müsste, wenn ich das richtig verstanden habe. das geht noch nicht einmal bei tabellen, dass eine spalte in einem contraint zwei tabellen beinhalten kann.
- Im Webinterface kann ich nur als Primary Key Kennzahl und als Composite Key das JAHR auswählen, aber ich bekomme ich das Geschlecht da auch noch mit rein?
wenn ich das richtig verstanden habe, willst du einen PK über die drei spalten bilden ? das geht, wie es das Webinterface macht, weiß ich leider nicht, arbeite damit nicht. aber du kannst den PK leicht über sql angeben. hier mal eine website, die ich auch immer wieder benutze, schließlich hat man ja nicht alles im kopf. ;-)
[Link: http://www.techonthenet.com/oracle/primary_keys.php]
Ilja