728x90
반응형
Oracle -> MySQL로 데이터 마이그레이션 중 다음과 같은 에러가 발생했다.
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
마이그레이션 순서가 테이블 생성 -> 데이터 insert -> PK, index, Foreign Key 생성 ..으로 이어지는데,
중복되는 데이터때문에 Foreign Key를 추가할 수 없다는 오류였다.
중복되는 레코드를 찾아서 삭제하려고하는데 데이터의 양이 많을 경우 하나 하나 찾기는 불가능하다.
그럴때에는 다음과 같이 left join을 이용하여 중복 레코드를 쉽게 찾을 수 있다.
// au_task - child, basic_user - parent
SELECT au_task.COMPANY_CODE, au_task.COMPANY_CODE
FROM au_task LEFT JOIN basic_user ON au_task.COMPANY_CODE = basic_user.COMPANY_CODE
WHERE basic_user.COMPANY_CODE IS NULL;
NOT IN, NOT EXISTS를 사용할 수 도 있다.
SELECT child_id, parent_id
FROM child
WHERE parent_id NOT IN (SELECT parent_id FROM parent);
SELECT child_id, parent_id
FROM child
WHERE NOT EXISTS (SELECT 1 FROM parent WHERE parent.parent_id = child.parent_id)
728x90
반응형
'Data > Database' 카테고리의 다른 글
[Database] 단계별 데이터베이스 설계 과정 (0) | 2021.02.13 |
---|---|
[DB] Oracle / MySQL - 특정 컬럼이름으로 테이블 찾기 (0) | 2021.02.01 |
[DB] 3단계 데이터베이스-외부/개념/내부스키마 (2) | 2020.12.17 |
[DB] Transaction과 ACID (0) | 2020.12.16 |
[DB] 데이터베이스 관리 시스템 (0) | 2020.12.13 |