Announcement

Collapse
No announcement yet.

Löschen "ähnlicher" Einträge

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

  • Löschen "ähnlicher" Einträge

    Hallo zusammen,

    ich möchte aus einer Tabelle alle diejenigen Einträge löschen, die einem anderen ähneln.

    Folgende Tabelle:
    Code:
    ID | x1 | x2
    -------------
    1  | a  | b
    2  | c  | a
    3  | a  | b
    Nun kenne ich die ID, bspw. ID=1. Nun möchte ich alle Zeilen löschen, deren Einträge für x1 und x2 denen in der Zeile mit ID=1 entsprechen, also in diesem Fall alle Zeilen mit x1 = a und x2 = b.

    Jemand ne Ahnung wie ich das elegant lösen kann?
    Vielen Dank
    Stefan

  • #2
    [highlight=sql]
    delete from <tabelle> where id in (
    select
    t2.id
    from
    <tabelle> t1
    join <tabelle> t2 on t2.x1 = t1.x1 and t2.x2 = t1.x2
    where t1.id = 1);
    [/highlight]

    Comment


    • #3
      ...oder etwas kürzer:
      [highlight=sql]
      DELETE FROM <tabelle> WHERE (x1, x2) IN (
      SELECT t2.x1, t2.x2
      FROM <tabelle> t2
      WHERE t2.id = 1);
      [/highlight]

      Anzumerken sei jedoch, dass es durchaus DBMS gibt, die den Zugriff auf die gerade geänderte Tabelle in einem Subselect nicht zulassen.

      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


      • #4
        Hi,

        dazu ist anzumerkern:

        Beim Statement von Markus muss noch angefügt werden:

        AND id <> 1

        sonst wird auch die Zeile mit id=1 gelöscht.
        Bei Falks Statement wahrscheinlich auch (kann ich nicht nachvollziehen, da diese Syntax auf dem Sql-Server nicht läuft)

        Gruß
        docendo discimus

        Comment


        • #5
          Bekomme bei beiden Statements folgende Fehlermeldung:

          SQL Error (1093): You can't specify target table '<tabelle>' for update in FROM clause

          Es handelt sich um eine MySQL-Datenbank (5.0.45).

          Folgende Erklärung liefert die MySQL-Doku:

          Code:
          UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);
          You can use a subquery for assignment within an UPDATE statement because subqueries are legal in UPDATE and DELETE statements as well as in SELECT statements. However, you cannot use the same table (in this case, table t1) for both the subquery FROM clause and the update target.

          Heißt das ich muss doch erst eine Abfrage machen um die Parameter zu ermitteln und diese dann in einem zweiten Schritt löschen?

          Viele Grüße
          Stefan

          Comment


          • #6
            Genau, oder mit einem anderen Datenbanksystem arbeiten.

            Gruß
            docendo discimus

            Comment


            • #7
              Ok, danke. Hab's jetzt so gemacht.

              Comment

              Working...
              X