Eri*_*ope 2 mysql sql select join
我有一些MySQL表需要删除冗余数据.例如:
id email date data...
1 email1@gmail.com 2012-01-01 my_data
2 email2@gmail.com 2012-01-01 my_data
3 email1@gmail.com 2012-01-02 my_data
4 email1@gmail.com 2012-01-02 my_data (redundant)
5 email2@gmail.com 2012-01-02 my_data
Run Code Online (Sandbox Code Playgroud)
我需要删除冗余行,但我想首先选择它们.我在StackOverflow上找到了这个,但它需要电子邮件地址
SELECT *
FROM `my_table`
WHERE `id` IN (SELECT `id`
FROM `my_table`
where `email` = 'email1@gmail.com'
group by `date`
HAVING count(*) > 1)
Run Code Online (Sandbox Code Playgroud)
我可以像上面那样使用什么查询,在嵌入式查询中不使用WHERE限定符,这样我就可以完成所有电子邮件地址了?
查询可以是SELECT查询.我不介意在PHPMyAdmin中手动删除行.
DELETE FROM tableName
WHERE ID NOT IN
(
SELECT minID
FROM
(
SELECT email, date, MIN(id) minID
FROM tableNAme
GROUP BY email, date
) x
)
Run Code Online (Sandbox Code Playgroud)
或者通过使用 JOIN
DELETE a
FROM tableName a
LEFT JOIN (
SELECT minID
FROM (
SELECT email, DATE, MIN(id) minID
FROM tableNAme
GROUP BY email, DATE
) y
) x
ON a.ID = x.minID
WHERE x.minID IS NULL;
Run Code Online (Sandbox Code Playgroud)
以下查询仅为SELECT每个电子邮件和日期重复行
SELECT a.*
FROM tableName a
LEFT JOIN
(
SELECT minID
FROM
(
SELECT email, date, MIN(id) minID
FROM tableNAme
GROUP BY email, date
)y
) x ON a.ID = x.minID
WHERE x.minID IS NULL
Run Code Online (Sandbox Code Playgroud)