매우 복잡한 쿼리가 발생합니다. 내가 가지고있는 것은 자동차 부품 (parts_list, 약 600 행)이있는 테이블입니다.이 테이블에는 이름과 모터 의존성 여부와 같은 부품에 대한 정보가 포함되어 있습니다. 모터 종속성에 대해 나는 두 개의 서로 다른 질의를 가지므로, 이것은 모터 의존성이없는 것이다 (0, 나는 그것을 부울로 저장한다). 대부분의 부품을 분해하고 더 많은 부품으로 분해 할 수 있습니다. 그 이유는 부품을 나무로 저장하는 것이고 그 쿼리에서는 분해 할 수없는 부품 (나무 잎)만을 사용하기 때문입니다. 이 표는 가능한 부분의 목록 만 나타냅니다. 이제 각 자동차 모델에 대해 행을 다른 테이블 (부품)에 저장하고 part_list_id와 model_id를 함께 쓴 다음 가격과 수량을 셉니다. 이제 내가 쿼리를 실행하면 테이블 "파트"에서 약 500 개의 행 (리프 부분 만 사용)을 성공적으로 생성하여 필요한 작업을 수행합니다. 모델 ID는 약 500 (잎) 부분입니다. 그러나 때로는 특정 부품에 대한 다른 모델 행을 생성합니다. 그리고 쿼리는 나머지 499 행을 만들지 않습니다. WHERE NOT EXISTS select 쿼리가 0을 돌려주는 경우에만 작동합니다. 한 행이라도 존재하면 나머지를 삽입하지 않습니다. 그러나 루프와 같은 다른 값으로 검사해서는 안되기 때문에 그것은 나에게 이해가되지 않습니까?MySQL 삽입 하나의 행이 있어도 쿼리가 삽입되지 않는 곳
INSERT INTO parts (parts_list_id, model_id, motor_id)
SELECT orig1.id, '" . $this->model_id . "', '0'
FROM parts_list AS orig1
LEFT JOIN parts_list AS orig2 ON (orig1.id = orig2.parent_id)
WHERE orig2.id IS NULL
AND orig1.motor_dependent = '0'
AND NOT EXISTS (
SELECT t1.id
FROM parts_list AS t1
LEFT JOIN parts_list AS t2 ON (t1.id = t2.parent_id)
LEFT JOIN parts ON (parts.parts_list_id = t1.id)
WHERE t2.id IS NULL
AND t1.motor_dependent = '0'
AND parts.parts_list_id = t1.id
AND parts.model_id = :model_id
)
감사합니다. NOT EXIST가 모든 행에 대해 전역이라는 것을 알았습니다. 나는 WHERE NOT EXISTS 절의 하위 쿼리와 SELECT 쿼리의 하위 ID에서 모두 두 ID를 잠그는 방식으로 작업했습니다. 그러나 어쨌든 나는 적당한 키워드를 사용하지 않고있다. NOT IN은 사용해야하는 것입니다. – Tony
좋은 하루 되세요. – gpicchiarelli