Announcement

Collapse
No announcement yet.

SQL Abfrage mit Anzahl Bedingung

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

  • SQL Abfrage mit Anzahl Bedingung

    Hallo

    Ich habe da ein Problem, und komme aktuell nicht weiter. Ich weiss einfach nicht wie ich das lösen soll vielleicht hat jemand ja eine Idee.

    Ich habe die Tabelle objekte. objekte haben viele andere_objekte und jedes hat einen Typ.
    Code:
    objekte
    -name
    Code:
    andere_objekte
    -objekt_id
    -type_id
    -name
    Code:
    types
    -name
    So jetzt müsste ich eine Abfrage machen, wo ich alle Objekte bekomme, die einen anderes Objekte eines oder mehreren bestimmtem Typs haben. Also zum Beispiel alle Objekte die ein anderes Objekt vom Typ 1 haben.

    Weiss jemand wie das geht?
    Zuletzt editiert von Derano; 15.04.2008, 11:49.

  • #2
    Code:
    SELECT  Vendors.Name
    FROM Vendors 
    JOIN Rooms ON Rooms .Vendor_ID = Vendors.ID
    JOIN Room_types ON Room_Types.ID = rooms.room_type_ID
                                 AND room_Types.Name = 'Büro' 
                                 OR room_Types.Name ='Sitzungszimmer'

    Comment


    • #3
      Diese Abfrage selektiert mir aber alle Vendor, die ein Room des Typs Büro Oder Sitzungszimmer haben.
      Was ich aber brauche ist, alle Vendor die einen Room des Typs Büro und einen Room des Typs Sitzungszimmer haben.

      Comment


      • #4
        Hallo,

        vielleicht bekommst Du es mit dieser Anregung selbst hin:


        http://entwickler-forum.de/showthread.php?t=46980


        Gruß frauwue
        docendo discimus

        Comment


        • #5
          Ja der Beitrag hat mir schon geholfen, nur das mit Subqueries von Exists zu lösen ist einfach langsam, kann man das nicht geschickt joinen

          Comment


          • #6
            Hallo Derano,

            also eine Lösung mit Subquery halte ich für solche Problemstellungen immer für die erfolgreichste. Da es ja sicherlich sehr viel weniger Raumtypen als Räume sind, könnte man noch die andere "Exists"-Variante probieren. Also statt ...WHERE EXISTS (SELECT ... WHERE A = B) ein ...WHERE A NOT IN (SELECT B ...).

            Wenn du ganz auf Subqueries verzichten willst, dann könnte man sich noch ein paar "Nebenbedingungen" zunutze machen. z.B.:
            [highlight=sql]
            SELECT Vendors.Name
            FROM Vendors
            JOIN Rooms ON Rooms .Vendor_ID = Vendors.ID
            JOIN Room_types ON Room_Types.ID = rooms.room_type_ID
            where room_Types.Name = 'Büro'
            OR room_Types.Name ='Sitzungszimmer'
            group by Vendors.name
            having count(distinct room_types.name) > 1
            [/highlight]
            Inwieweit das jedoch performanter ist, kann ich dir nicht sagen.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Hallo Falk

              Das löst mein Beschriebenes Problem wunderbar und ist sogar noch einigermassen Perfomant. (um ein vielfaches meiner Lösung.)
              Jetzt meine weiteres Problem ist, dass ich bestimmen können muss, ob der Vendor 3 oder mehr Büros hat. Dies ist mit diesem Query glaub ich nicht möglich.

              Comment


              • #8
                Hallo Derano,

                evtl. so:
                [highlight=sql]
                ...
                HAVING count(DISTINCT room_types.name) > 1
                AND sum(IF(room_types.name = 'Büro', 1, 0)) > 3
                [/highlight]

                Gruß Falk
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment

                Working...
                X