verschachteltes DELETE statement

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

  • verschachteltes DELETE statement

    Hallo,

    ich habe in einer MySQL-DB eine Tabelle "log". In dieser Tabelle befinden Webserverlogdaten.
    Unter anderem der sogenannte Browser-Eintrag und eine Session-Nummer.

    Nun möchte ich alle Sessions löschen, in denen im Browser Eintrag das Wort "bot" vorkommt.

    Bräuchte bei der Formulierung des DELETE-Statements Hilfe. Hier meine bisherigen Überlegungen zu dem Problem (aber nicht getestet):

    DELETE FROM "log" where "session_nr" =
    SELECT DISTINCT "session_nr" FROM "log" WHERE "browser" LIKE "%bot%"

  • #2
    Wozu den Subselect..?

    DELETE FROM log WHERE browser LIKE '%bot%'

    Comment


    • #3
      Weil die Seesion Nummer über mehrere Einträge reicht und ggf. die Browserinformation in einer Zeile fehlt.

      Comment


      • #4
        Original geschrieben von elf7013
        Weil die Seesion Nummer über mehrere Einträge reicht und ggf. die Browserinformation in einer Zeile fehlt.
        Hattest du nicht erwähnt Workaround mit temporärer Tabelle, bestimmt Performance-fressend (ungetestet):
        Code:
        DELETE FROM log WHERE session_nr IN
        (SELECT x_id FROM (SELECT session_nr AS x_id FROM log WHERE browser LIKE '%bot%') AS x)

        Comment


        • #5
          Original geschrieben von Cheadle
          Hattest du nicht erwähnt Workaround mit temporärer Tabelle, bestimmt Performance-fressend (ungetestet):
          Code:
          DELETE FROM log WHERE session_nr IN
          (SELECT x_id FROM (SELECT session_nr AS x_id FROM log WHERE browser LIKE '%bot%') AS x)

          Wofür ist das AS x?

          Comment


          • #6
            Original geschrieben von elf7013
            Wofür ist das AS x?
            Das ist der Alias der abgeleiteten Tabelle. Ist notwendig in MySQL.

            Comment


            • #7
              Habe die Abfrage in einer Test Tabelle getestet und diese scheint zu funktionieren.

              Über Performance kann ich im Moment noch nichts sagen.

              Comment


              • #8
                (ungetestet) aber müsste nicht auch folgendes funktionieren:

                DELETE FROM `log` WHERE `session_nr` IN ( SELECT DISTINCT `session_nr` FROM `log` WHERE `browser` LIKE '%bot%' )

                ?

                Comment


                • #9
                  Original geschrieben von elf7013
                  (ungetestet) aber müsste nicht auch folgendes funktionieren:

                  DELETE FROM `log` WHERE `session_nr` IN ( SELECT DISTINCT `session_nr` FROM `log` WHERE `browser` LIKE '%bot%' )

                  ?
                  Dann teste doch

                  Du kannst nicht aus einer Tabelle löschen, während sie per Subselect abgefragt wird. Daher der Workaround mit der erzwungenen temporären Tabelle

                  Comment


                  • #10
                    Gelöst.
                    Last edited by elf7013; 06-05-2009, 15:45.

                    Comment

                    Working...
                    X