Announcement

Collapse
No announcement yet.

Vereinen zweier Abfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vereinen zweier Abfragen

    Hallo,

    ich benötige dringend eure Hilfe:

    ich habe folgende Abfragen, die ich gerne zu einer Abfrage vereinen würde.

    Abfrage 1 gibt mir Fremdschlüssel mit ihren zugehörigen Datenobjekt und Attribut wieder:

    select distinct (key.key_nr), key.key_type, key.key_dobj, dataobject.dobj_name, dataobject.dobj_type, attribute.att_nr, attribute.att_name
    from key
    inner join dobj_att_rs_key on dobj_att_rs_key.key_nr = key.key_nr
    inner join attribute on dobj_att_rs_key.att_nr = attribute.att_nr
    inner join dataobject on dataobject.dobj_nr = key.key_dobj
    where (key.ins_by=1 and key.key_type in ('F','f') and dataobject.dobj_type in ('V','v'));

    Abfrage 2 gibt mir die Primärschlüssel mit ihren Attributen und Datenobjekten wieder, auf welche sich die Fremdschlüssel beziehen:

    select key.key_nr as Primary_key, dataobject.dobj_nr, dataobject.dobj_name
    from key
    inner join dataobject on dataobject.dobj_nr = key.key_dobj
    where (key_nr in (select key.key_reference from key));

    Ich habe den Tipp bekommen die Joins mehrmals mit unterschiedlichen Aliasnamen durchzuführen. Allerdings weiß ich nicht wie. Ich hoffe ihr könnt mir helfen.


    Hier seht ihr den Aufbau der Datenbank: Diagramm MD2.jpg

  • #2
    Falls es nur um das Prinzip eines mehrfachen Joins mit unterschiedlichen Aliasnamen geht geht dann hier ein Beispiel:
    Code:
    select * from key t0
    inner join dataobject t1 on t1.COL1=t0.key_nr
    inner join dataobject t2 on t2.COL2=t0.key_nr

    Comment


    • #3
      Hi erstmal danke für die Antwort,

      das hilft mir erstmal weiter. Nur weiß ich eben immer noch nicht wie ich den Befehl logisch aufbauen soll. Wie bekomme ich die beiden where Klauseln unter einen Hut. Wenn ich zwei Unterschiedliche Aliasnamen vergebe, bekomme ich bei einer Abfrage trotzdem die gleichen Werte zurück. Kurz gesagt, ich weiß nicht damit umzugehen. Ich hoffe ihr könnt mir da weiterhelfen.

      Comment


      • #4
        Also, ich bin jetzt so weit, dass er mir alle Foreign Keys mit ihren zugehörigen Attributen und Datenobjekten und die dazugehörige Nr des Primary Keys auf den der FK referenziert anzeigt. Aber wie schaffe ich es, dass er mir das Datenobject anzeigt zu dem der Primary Key gehört????

        select distinct (key.key_nr) as Foreign_Key_nr, key.key_type, key.key_dobj as DOBJ_of_FK, DO1.dobj_name as DOBJ_name_of_FK, attribute.att_nr as attribte_nr_of_FK, attribute.att_name as attribute_name_of_FK, key.key_reference as Primary_Key_nr
        from key
        inner join dobj_att_rs_key on dobj_att_rs_key.key_nr = key.key_nr
        inner join attribute on dobj_att_rs_key.att_nr = attribute.att_nr
        inner join dataobject DO1 on DO1.dobj_nr = key.key_dobj
        where (key.ins_by=1 and key.key_type in ('F','f'));

        Comment


        • #5
          Ich habe die Lösung gefunden. Ich habe key über key_reference auf key_nr in key gejoint und dann noch einmal mit dem Dataobject. Die Lösung sieht folgendermaßen aus:

          select distinct (key.key_nr) as Foreign_Key_nr, key.key_type, key.key_dobj as DOBJ_of_FK, DO1.dobj_name as DOBJ_name_of_FK, attribute.att_nr as attribte_nr_of_FK, attribute.att_name as attribute_name_of_FK, key.key_reference as Primary_Key_nr, DO2.dobj_nr as DOBJ_nr_PK, DO2.dobj_name as DOBJ_name_PK
          from key
          inner join dobj_att_rs_key on dobj_att_rs_key.key_nr = key.key_nr
          inner join attribute on dobj_att_rs_key.att_nr = attribute.att_nr
          inner join dataobject DO1 on DO1.dobj_nr = key.key_dobj
          INNER JOIN key k ON k.key_nr = key.key_reference
          inner join dataobject DO2 on k.key_dobj = DO2.dobj_nr
          where (key.ins_by=1 and key.key_type in ('F','f'));

          Comment


          • #6
            Ich hab mal eine generelle Frage: Wieso verwendest Du so ein kompliziertes ER-Modell um Metadaten abzuspeichern, die in der Datenbank selbst schon vorhanden sind.
            Über die entsprechenden v$ Views kommst du unkomplizierter an diese Informationen und musst sie nicht mal selbst pflegen.

            Dim
            Zitat Tom Kyte:
            I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

            Comment

            Working...
            X