2012-04-05 6 views
1

Ich habe ein Problem. Ich habe 3 Tabellen wie folgt:Wählen, zählen und löschen Datensätze aus Tabelle zu vereinfachen

1) met_ID (primair) usw.

2) magn_ID (primair) met_ID (Sekundär-) ...

3) sens_ID (primair) met_ID (secondary) ...

ich habe Datensätze in der Tabelle 1 zu löschen, wo in Tabelle zählen met_ID 2 oder 3 ist, weniger als 10 ..

SELECT COUNT(*) AS count, met_ID 
FROM tbl_1, tbl_2 
Where met_ID = met_ID 
GROUP BY met_ID 

Ich machte eine Abfrage und in PHP mit WHILE-Schleife lösche ich diese Datensätze aus Tabelle 1. Es funktioniert gut für 1000 Datensätze zu löschen, aber ich bin mir nicht sicher, ob es für 100 000 oder mehr Datensätze in der Tabelle voll sein wird.

Gibt es eine Möglichkeit zu erreichen, was ich in SQL-Abfrage tun?

Antwort

0
DELETE from tbl_1 
WHERE 10 > (select count(*) from tbl_2 where tbl2.met_id=tbl1.met_id) OR 
     10 > (select count(*) from tbl_3 where tbl3.met_id=tbl1.met_id) 
+0

oh .. vielleicht interpretierte ich die Frage falsch. will er <10 von beiden oder <10 für beide kombiniert? –

+0

Ich habe verstanden, wie ich die Abfrage geschrieben habe :-) Fragen Sie den Autor besser. –

+0

Arbeit wie ein Charme ... nur ich verwechselte> mit Roman

0

ersten Einsatz eine Unterabfrage mit mit ...

zweitens Sie die Auswahl nicht die Summe von Vorkommen in table2 und table3 Sie ein Cross Join tun, damit Ihre Anzahl ist eigentlich das Produkt ..

.

versuchen, diesen

DELETE from table_1 where met_ID IN 
(
    select met_ID FROM 
    (
     SELECT met_ID FROM tbl_2 
     union 
     select met_id FROM tbl_3 
) 
    GROUP BY met_ID 
    HAVING count(*) < 10 
); 
+0

dank für Ihre Zeit! beide Methoden funktionieren – Roman

Verwandte Themen