Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Brauch dringend Hilfe - Einfach Löschabfrage krieg ich nicht hin

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Maris, 14 Juni 2017.

  1. Maris

    Maris Aktiver Benutzer

    Hi Guys,

    ich habe zwei Tabellen

    Tabelle1 hat 1000 Datensätze

    Tabelle2 von den 1000 Datensätzen 100 Stk.

    Wie kann ich aus Tabelle1 die 100 Datensätze aus Tabelle2 löschen. Ich kriegs nicht hin mit SQL.

    Kann mir jemand helfen?

    Gruß,
    Chris
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Einfache Mengenlehre ;-)

    Code:
    test=# create table t1 as select * from generate_series(1,10) s;
    SELECT 10
    test=# create table t2 as select * from generate_series(5,15) s;
    SELECT 11
    test=# select * from t1;
     s  
    ----
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
    (10 rows)
    
    test=# select * from t2;
     s  
    ----
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
    (11 rows)
    
    test=# delete from t1 where s in (select * from t1 intersect select * from t2);
    DELETE 6
    test=# select * from t1;
     s
    ---
     1
     2
     3
     4
    (4 rows)
    
     
  3. Maris

    Maris Aktiver Benutzer

    So ähnlich habe ich es versucht. Allerdings komme ich mit deiner SQL Syntax nicht so klar. Ich kann nur mysql.

    Gruß,CHris
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ach ja, intersect kann mysql nicht.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Vielleicht kann es ja das:

    Code:
    test=# delete from t1 where s in (select t1.s from t1 inner join t2 on t1.s=t2.s);
    DELETE 6
    
    Aber möglicherweise kann MySQL in einem Delete-Statement nicht auch noch mit Select auf dieselbe Tabelle zugreifen, irgend was war da, ...
     
  6. Maris

    Maris Aktiver Benutzer

    Ich probiers!
     
  7. BerndB

    BerndB Datenbank-Guru

    Hi Chris,

    bei MySQL solltest du das einfach so machen.

    Code:
    DELETE t1
    FROM yourTable1 t1
    LEFT JOIN yourTable2 t2 ON t1.id = t2.id
    WHERE t2.id IS NOT NULL;
    Hier noch ein Beispiel dazu:

    Code:
    MariaDB [sample]> select * from yourTable1;
    +------------+------------+----+
    | origin     | dst        | id |
    +------------+------------+----+
    | New York   | Boston     |  1 |
    | Boston     | New York   |  2 |
    | New York   | Washington |  3 |
    | Washington | Boston     |  4 |
    | Washington | Raleigh    |  5 |
    +------------+------------+----+
    5 rows in set (0.00 sec)
    
    MariaDB [sample]> select * from yourTable2;
    +--------+----------+----+
    | origin | dst      | id |
    +--------+----------+----+
    | Boston | New York |  2 |
    +--------+----------+----+
    1 row in set (0.00 sec)
    
    MariaDB [sample]> DELETE t1
        -> FROM yourTable1 t1
        -> LEFT JOIN yourTable2 t2 ON t1.id = t2.id
        -> WHERE t2.id IS NOT NULL;
    Query OK, 1 row affected (0.01 sec)
    
    MariaDB [sample]> select * from yourTable1;
    +------------+------------+----+
    | origin     | dst        | id |
    +------------+------------+----+
    | New York   | Boston     |  1 |
    | New York   | Washington |  3 |
    | Washington | Boston     |  4 |
    | Washington | Raleigh    |  5 |
    +------------+------------+----+
    4 rows in set (0.00 sec)
    
    MariaDB [sample]>
    Gruss

    Bernd
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden