Announcement

Collapse
No announcement yet.

Wie am schnellsten?

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

  • Wie am schnellsten?

    Hallo!

    Ist vermutlich nicht allzu schwer, aber ich suche auch nach einer performanten Abfrage und bin in SQL noch ziemlich unsicher.

    Ich möchte folgende Anfrage machen:

    Es gibt eine Tabelle in der Form userID | objektID. Also zwei Spalten. Jetzt möchte ich alle User, die Objekt x,y,und z haben. Wie mach ich das denn am schnellsten im Sinne von Verarbeitungsdauer? Mit mehreren EXISTS? Ich kann ja nicht sagen "where objektID=x and objektID=y and objektID=z"...

    Achso, ich benutze mysql 5

  • #2
    Hallo,

    [highlight=sql]
    SELECT userID
    FROM Tabelle
    WHERE objectID IN (x, y, z)
    [/highlight]
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Habe mich vielleicht missverständlich ausgedrückt.

      Ich möchte alle Benutzer, die die Objekte X und Y und Z haben. Also alle Objekte. Deine Anfrage liefert mir alle Benutzer, die Objekt x oder y oder z haben. Oder liege ich falsch?

      Comment


      • #4
        Siehe: Multiple Konditionen für 1 Feld (WHERE Clause)
        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


        • #5
          [highlight="sql"]
          select
          t.UserID
          from
          Tabelle t
          where
          t.ObjectID = x and
          exists ( select UserID from Tabelle where UserID = t.UserID and ObjectID = y) and
          exists ( select UserID from Tabelle where UserID = t.UserID and ObjectID = z);
          [/highlight]

          Comment


          • #6
            Originally posted by mankal View Post
            ...Deine Anfrage liefert mir alle Benutzer, die Objekt x oder y oder z haben. Oder liege ich falsch?
            Das ist richtig und die so formulierte Abfrage falsch. Allerdings könnte man ein wenig weiter denken. Die gesuchten Nutzer sind die, bei denen die eindeutige (DISTINCT) Anzahl der gefundenen DS = 3 ist.

            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
              Super, vielen Dank.

              Comment


              • #8
                Hallo,

                für SQL Server 2005 (auch wenn sich dieser Post auf MySQL bezieht) kann das ganze so gelöst werden:

                [highlight=sql]
                SELECT UserID FROM #tmp WHERE ObjectID = x
                INTERSECT
                SELECT UserID FROM #tmp WHERE ObjectID = y
                INTERSECT
                SELECT UserID FROM #tmp WHERE ObjectID = z
                [/highlight]
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment

                Working...
                X