2012-04-05 3 views
1

문제가 있습니다. I는 표 3과 같이 아래 가지고 등표에서 레코드 선택, 계산 및 삭제가 간단합니다.

1) met_ID (primair)

2) magn_ID (primair) met_ID (보조) ...

3) sens_ID (primair) met_ID (보조) ... I은 2 또는 3이 10 미만 표 계산 met_ID 표 1 레코드를 삭제해야

..

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

나는 쿼리를 만들었고 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

오 .. 어쩌면 내가 질문을 해석 잘못. 그는 둘 중 하나를 10 점 미만, 또는 둘 모두를 10 점 미만으로 줄까? –

+0

내가 쿼리를 썼을 때 나는 이해했다 :-) 저자에게 더 잘 묻는다. –

+0

은 매력처럼 작동합니다 ... 나는 <와 (과) 섞여서 데이터베이스에서 83 000 레코드를 삭제했습니다 :-D 시간 내 주셔서 감사합니다! – Roman

0

처음 사용할 필요가있는 하위 쿼리 ... 둘째

, 당신은 그래서 당신의 수는 실제로 제품입니다, 당신이 십자가에 가입하고있는 표 2와 표 3 에 차례 나오는의 합을 선택하지 않는 .. .

당신의 시간이

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