법적 이유로 정리해야하는 데이터베이스가 상당히 많습니다. 나는 웹 개발자이지만 SQL 쿼리에 관해서는 경험이 거의 없습니다.
컨텍스트는 "연락처", "회사"및 "소스"필드가있는 CRM입니다.
"source"에는 source1, source2, source3 및 sources4의 4 가지 가능한 값이 있습니다.
"source1"은 법적인 이유로 제거되어야하며 원래 source1에서 온 속임수도 제거해야합니다.
사실, 일부 회사는 중복되고 이전 데이터베이스에서 가져오고 다시 가져 왔을 때 최대 3 개의 소스로 표시됩니다.
이것이 보여주는 방법입니다.
**name | company | source**
name1 | company1 | source1 *< delete row (rows with source1 must be deleted)*
name1 | company1 | source2 *< delete row (company1 comes from source1)*
name1 | company1 | source3 *< delete row (company1 comes from source1)*
name2 | company2 | source1 *< delete row (rows with source1 must be deleted)*
name2 | company2 | source2 *< delete row (company2 comes from source1)*
name3 | company3 | source2 *< keep row (company3 doesn't come from source1)*
name4 | company4 | source3 *< keep row*
name5 | company5 | source4 *< keep*
내가해야 할 일은 다음과 같습니다.
1- 회사에 source2가 있고 source1이 포함 된 복제가있는 줄을 제거합니다.
2-이 작업이 완료되면 source2가있는 모든 연락처와 source1을 특징으로하는 dupe에 대해 동일한 작업을 수행합니다.
SQL 요청이 무엇을 할 수 있는지, 어떤 명령을 사용해야하는지 정말 모르겠습니다.
가능합니까?
감사합니다 !
다음과 같이 WHERE 절에 하위 쿼리를 사용할 수 있습니다.
DELETE FROM mytable
WHERE mytable.company IN (SELECT mytable.company
FROM mytable
WHERE mytable.source = 'source1'
GROUP BY mytable.company)
또 다른 대안은 EXISTS를 사용하는 것 입니다.
MySQL 해결 방법 (변경되는 테이블이 WHERE 절에서 사용되는 것을 허용하지 않기 때문) :
DELETE FROM mytable
WHERE mytable.company IN (SELECT mytbl.company
FROM (SELECT * FROM myTable) as mytbl
WHERE mytbl.source = 'source1'
GROUP BY mytbl.company)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다