Announcement

Collapse
No announcement yet.

Tabellenverknüpfungsproblem

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

  • Tabellenverknüpfungsproblem

    Hallo allerseits,

    ich schlage mich seit Tagen mit einer Query herum, aber komme nicht zum Ziel.
    Hier erst einmal das Datenbank Layout und die Abfrage.

    Tabelle a
    aa, ab, ac, ad

    Daten:
    1, AA, 01, false
    2, BB, 02, true
    3, CC, 01, false

    Tabelle b
    ba, bb

    Daten:
    1, 01
    2, 02

    Tabelle c
    ca, cb

    Daten:
    10, 1
    11, 2

    die Abfrage:
    select a.aa, a.ab, a.ac. a.ad from a, b, c where a.ac = b.bb and b.ba = c.cb and c.ca = 10

    das Ergebnis:
    1, AA, 01, false
    3, CC, 01, false

    Das klappt alles super. Nun möchte ich aber die Spalte ac in Tabelle a mit auswerten. Das heist, ist in der Tabelle a Stalte ad ein Eintrag mit true so gib ihn auch mit aus.

    Theoretisch würde ich dann or a.ad = true anfühgen. Das geht aber nicht, weil die Abfrage nur alle 01 selectiert.

    Ich kenne mich mit Joins noch nicht so aus. aber ich denke, das mit einer Join Abfrage das Problem zu lösen ist.
    Aber wie? Wie bekomme ich die Spalte a.ad in die Auswertung?

    Danke im voraus!

    Tauerus

  • #2
    Schaue dir mal UNION an.

    bye,
    Helmut

    Comment


    • #3
      Hallo Helmut,

      ja das hört sich gut an. Aber ich habe Probleme bei der Umsetzung!
      Kann ich in Union Abfragen eine Where Klausel einbinden??
      Wie kann ich diese Abfrage mit UNION lösen?

      select * from A, B, C where A.a = B.a and B.b = C.c and C.a = 1

      ich möchte aus der Tabelle A alle Spalten ausgegeben haben. Das ist die Master Tabelle. Die Tabellen B und C dienen nur der selection "C.a = 1"

      Im zweiten Step möchte ich aus Tabelle A noch die Spalte A.b =1 selectieren, welche aber nicht mit den Ergebnissen mit der oberen Abfrage in Beziehung steht.

      Danke Tino!
      Zuletzt editiert von Tauerus; 10.03.2011, 16:32.

      Comment


      • #4
        Hallo,

        ja kannst Du.
        Du musst nur darauf achten, dass Du ober- und unterhalb des Unions die gleiche Anzahl an Spalten hast.

        Bei Deiner ersten Abfrage recht einfach

        [highlight=sql]
        select a.aa, a.ab, a.ac. a.ad from a, b, c where a.ac = b.bb and b.ba = c.cb and c.ca = 10
        UNION
        SELECT * from a WHERE a.ad='true'

        [/highlight]

        Ansonsten mit dummyspalten aufrüsten.

        Gruß

        Martin

        Comment


        • #5
          Hallo Martin,

          Ahhhhh... Genau das hat mit gefehlt!
          Habe die Abfrage an meine Tabellen angepasst und noch ein paar Abfrage-und Orderkriterien hinzugfügt uns was soll ich sagen!!!

          Es funktioniert!! Also der Lerneffekt war da, das Thema Union ist jetzt auch bei mir gespeichert.

          Danke an Euch alle für die schnelle und profesionelle Hilfe!

          Tschau Tino

          Comment


          • #6
            Hallo noch einmal,

            eine letzte Frage habe ich doch noch zu diesem Thema.
            Wie kann ich das Abfrage Ergebnis nach Spalte a.ab sortieren?

            Code:
             
            SELECT a.aa, a.ab, a.ac. a.ad FROM a, b, c WHERE a.ac = b.bb AND b.ba = c.cb AND c.ca = 10
            UNION
            SELECT * FROM a WHERE a.ad='true' order by a.ab
            Mit dieser Order by Klausel wird ja nur das Ergebnis von der Query vor Union sortiert, oder täusche ich mich?
            Das Ergebnis welches aus der Union-Klausel kommt, sortiert sich nicht mit!
            Es wird an die erste Abfage angehängt.

            Gruß Tino

            Comment


            • #7
              Wenn deine (von dir nicht genannte Datenbank) Subqueries kennt, sollte folgendes funktionieren:
              Code:
              SELECT * from (
              SELECT a.aa, a.ab, a.ac. a.ad FROM a, b, c WHERE a.ac = b.bb AND b.ba = c.cb AND c.ca = 10
              UNION
              SELECT * FROM a WHERE a.ad='true' order by a.ab
              ) as X order by ab
              bye,
              Helmut

              Comment


              • #8
                hi,

                select ....
                union select ...
                order by 1

                damit wird das Ergebnis der gesamten Abfrage nach der 1. Spalte sortiert.

                Gruß
                docendo discimus

                Comment


                • #9
                  Hallo nocheinmal,

                  Dnake für die Antworten! Wenn es noch so kopliziert klingt, so liegt doch immer eine einfache Lösung zu Grunde!

                  Beide Abfragen in ein Select packen und dann nach einer Spalte soritieren!
                  Warum fällt mir soetwas nicht ein!!!!

                  Hat prima geklappt! PROBLEM ist gelöst! Mein Anwendung läuft! Danke noch eimal an alle hilfsbereiten Problemlöser!

                  Meine DB ist übrigens MySQL in Verbindung mit PHP.

                  Also nochmals Danke für die schnelle Hilfe!

                  Gruß Tino

                  Comment

                  Working...
                  X