verschachteltes DELETE statement

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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%'

    Kommentar


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

      Kommentar


      • #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)

        Kommentar


        • #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?

          Kommentar


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

            Kommentar


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

              Über Performance kann ich im Moment noch nichts sagen.

              Kommentar


              • #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%' )

                ?

                Kommentar


                • #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

                  Kommentar


                  • #10
                    Gelöst.
                    Zuletzt geändert von elf7013; 06.05.2009, 16:45.

                    Kommentar

                    Lädt...
                    X