2012-04-05 2 views
1

У меня проблема. У меня 3 таблицы, как показано ниже:Выбор, подсчет и удаление записей из таблицы упрощают

1) met_ID (primair) и т.д.

2) magn_ID (primair) met_ID (вторичный) ...

3) sens_ID (primair) met_ID (вторичный) ...

Я должен удалить записи в таблице 1, где met_ID Количество в таблице 2 или 3 меньше, чем 10 ..

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

Я сделал запрос, а в PHP с циклом WHILE я удаляю записи из таблицы 1. Он отлично работает для 1000 записей для удаления, но я не уверен, будет ли он использоваться для 100 000 или более записей в таблице.

Есть ли способ выполнить то, что я делаю в sql-запросе?

ответ

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 .. возможно, я неправильно интерпретировал вопрос. он хочет <10 из или или <10 для обоих? –

+0

Я понял, что написал запрос :-) Спроси автора лучше. –

+0

работать как шарм ... только я перепутал> с <и удален ~ 83 000 записей из базы данных :-D спасибо за ваше время! – Roman

0

первого использования подзапроса с наличием ...

во-вторых, вы не выбираете сумму появлений в table2 и Table3 вы делаете перекрестное соединение, так что ваш счетчик на самом деле продукт .. .

попробовать это

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

спасибо за ваше время! оба метода работают – Roman

Смежные вопросы