Announcement

Collapse
No announcement yet.

Hilfe bei Abfrage

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

  • Hilfe bei Abfrage

    Hey Leute,
    hab ne Frage und hoffe ihr könnt mir weiterhelfen

    habe 2 Tabellen über eine Zwischentabelle verknüpft
    Tabelle 2 kann mehrmals mit Tabelle 1 verknüpft werden(über eine UID)
    Tabelle1:
    Tabelle1ID,...
    z.B.
    1, test
    2, test2
    3, test3
    4, test4

    Zwischentabelle:
    Tabelle1ID,Tabelle2ID
    1, 1
    1, 2
    1, 3
    2, 2
    2, 3
    3, 3
    4, 1
    4, 2
    4, 3

    Tabelle2:
    Tabelle2ID,...
    z.B.
    1, true
    2, true
    3, false



    Meine Frage nun:
    Wie schaffe ich es mir alle Daten ausgeben zu lassen,
    die genau TabellenID2=1 UND TabellenID2=2 UND TabellenID2=3 besitzen?
    Mit AND geht es nicht, da dies Reihenübergreifen ist, mit OR gibt er mir alle anderen auch mit aus, das selbe mit IN,...
    Vielen Dank schonmal

  • #2
    Eine einfache Lösung wäre z.B.:

    [highlight=sql]
    SELECT Tabelle1ID
    FROM Tabelle2
    GROUP BY Tabelle1ID
    HAVING COUNT(*) = 3
    [/highlight]

    Das findet alle Tabelle1IDs die 3 unterschiedliche Werte haben. Ich weiss nicht ob das ausreichend ist. In dem Beispiel haben alle andren weniger. Direkt abfragen ob die gruppierte Liste 1,2,3 hat kann man in einem GROUP BY meines Wissens nicht. Dafür müsste man dann vielleicht eine Stored Procedure schreiben. Welche DB verwendest Du denn? Manchen DBs haben eigene GROUP BY features die nicht im SQL Standard stehen. Vielleicht kann man auch da was machen (z.B. GROUP_CONCAT() in MySQL).

    http://dev.mysql.com/doc/refman/5.0/...n_group-concat

    Comment


    • #3
      Vielen Dank schon mal,
      ich verwende MSSQL Server 2008.
      Deine Lösung ist gut, reicht aber leider nicht,.. ich müsste genau die Daten haben, die z.B. die ID 3,7,9 haben,..

      Comment


      • #4
        Sollte so gehen:
        Code:
        select * from tabelle1 as t1 where
        exists (select 1 from tabelle2 as t2 where t2.tabelle1ID = t1.tabelle1ID and t2.tabelle2ID = 1) and
        exists (select 1 from tabelle2 as t2 where t2.tabelle1ID = t1.tabelle1ID and t2.tabelle2ID = 2) and
        exists (select 1 from tabelle2 as t2 where t2.tabelle1ID = t1.tabelle1ID and t2.tabelle2ID = 3)
        bye,
        Helmut

        Comment


        • #5
          Vielen Dank, ich werds mal ausprobieren, werd mich dann noch mal melden

          Comment


          • #6
            Perfekt, hat einwandfrei funktioniert, Danke!

            Comment

            Working...
            X