2014-06-05 2 views
1

내 질문 제목 정확하게 도움이 필요한 것.자식 테이블에 사용되지 않는 부모 테이블 행을 삭제하는 SQL 쿼리

표 해상력 & 관계 : enter image description here


나는 쿼리 이하이 시도하지만 measuring_units 테이블에서 "JL"데이터를 삭제할 수 없습니다.

DELETE t2 
     FROM food_units_relation t1 JOIN measureing_units t2 
     ON t1.measuring_unit_id = t2.measuremnt_id 
     WHERE t1.foodUnit_relation_Id = 17 and t2.measuremnt_id NOT IN(t1.measuring_unit_id) and t2.creater_id=1; 

답변

0
DELETE t2 
FROM measureing_units t2 
LEFT JOIN food_units_relation t1 ON t1.measuring_unit_id = t2.measuremnt_id 
WHERE t1.foodUnit_relation_Id = 17 and t1.measuring_unit_id is null and t2.creater_id = 1; 
+0

이 답변은 아마도, 낮은 품질 검토 대기열에 켜져 일부 코드를 설명하십시오. 당신이 이것을 (당신의 대답에서) 설명한다면, 당신은 더 많은 상향 회선을 얻을 가능성이 더 크며, 질문자는 실제로 뭔가를 배웁니다! –

+0

@TheGuywithTheHat, 통보 주셔서 감사합니다. OP가 뒤따라 나오지 않는 한별로 설명하지 않습니다. 그것은 곧바로 빠른 답변입니다 :) –

+0

@ amit_g 내 질문에, 내가 그 질문에 설명대로 레코드를 삭제하지 귀하의 쿼리를 시도 –

0
DELETE MEASUREING_UNITS.* 
FROM MEASUREING_UNITS 
    LEFT JOIN FOOD_UNITS_RELATION ON MEASUREING_UNITS.MEASUREMENT_ID = FOOD_UNITS_RELATION.MEASURING_UNIT_ID 
WHERE FOOD_UNITS_RELATION.FOOD_UNITS_RELATION_ID IS NULL; 

그것을 확인 : 그것은 "food_units_relation"테이블

내가 노력이 하나에서 사용되지 않기 때문에 나는, "measuring_units"테이블 (62)와 해당 행을 삭제하려면 SQLFiddle.

+0

알 수없는 'where 절'의 'FOOD_UNITS_RELATION.FOOD_UNITS_RELATION_ID'열 및 where 절에 해당 creater_id 및 t1.foodUnit_relation_Id 조합을 가져 오지 않았습니다. –

0

여기에서 문제는 INNER JOIN을 사용하므로 에는 존재하지 않는 measuremnt_id을 선택하지 않았습니다. 대신 RIGHT 조인을 사용하고 t1 테이블 WHERE 또한 IN 조건을 제외 :

DELETE t2 
     FROM food_units_relation t1 RIGHT JOIN measureing_units t2 
     ON t1.measuring_unit_id = t2.measuremnt_id 
     WHERE t1.measuring_unit_id IS NULL 
       AND t2.creater_id=1; 

하거나 사용하지 않을 존재합니다, 당신은하지 않았다 때문에

DELETE FROM measureing_units t2 
     WHERE NOT EXISTS (SELECT * FROM food_units_relation t1 
         WHERE t1.measuring_unit_id = t2.measuremnt_id) 
      AND t2.creater_id=1 
관련 문제