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

Maris

Aktiver Benutzer
Beiträge
32
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
 
Werbung:
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)
 
So ähnlich habe ich es versucht. Allerdings komme ich mit deiner SQL Syntax nicht so klar. Ich kann nur mysql.

Gruß,CHris
 
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, ...
 
Werbung:
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
 
Zurück
Oben