我有一个很大的数据库,我需要清理法律原因。虽然我是一名webdev,但在SQL查询方面我还是没有经验。
上下文是一个CRM,其中包含“联系人”,“公司”和“来源”字段。
“source”有4个可能的值:source1,source2,source3和sources4
“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的欺骗行为执行相同的操作
我真的不知道SQL请求可以做什么以及我应该使用哪些命令。
甚至可能吗?
谢谢!
答案 0 :(得分:0)
您可以在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)