Mysql SQL-删除表X中的所有重复项
我尝试从表fe_用户中获取所有冗余UID的列表,然后运行DELETE命令删除它们 e、 g.我有以下表格供用户使用:Mysql SQL-删除表X中的所有重复项,mysql,sql,Mysql,Sql,我尝试从表fe_用户中获取所有冗余UID的列表,然后运行DELETE命令删除它们 e、 g.我有以下表格供用户使用: uid | pid | username -------------- 1 | 100 | hans 2 | 100 | karl 3 | 100 | franz 4 | 100 | karl 5 | 100 | hans 这是我选择所有重复项的方式: SELECT * FROM fe_users WHERE uid NOT IN ( SE
uid | pid | username
--------------
1 | 100 | hans
2 | 100 | karl
3 | 100 | franz
4 | 100 | karl
5 | 100 | hans
这是我选择所有重复项的方式:
SELECT * FROM fe_users
WHERE uid NOT IN (
SELECT uid
FROM fe_users
WHERE pid=100
GROUP BY username
HAVING COUNT(username) > 1
)
AND username IN (
SELECT username
FROM fe_users
WHERE pid=100
GROUP BY username
HAVING COUNT(username) > 1
)
返回:
现在我必须删除它们
尝试1:
提示:刚才用DELETE替换了上面的SELECT查询
答复:
无法在FROM子句中为更新指定目标表“fe\U users”
尝试2
所以我试着再使用一个select,如中所建议的
答复:
“从pid=0 GROUP BY的fe_用户中选择uid”附近的语法错误
4号线的usernam
我不知道我如何才能做到这一点,我想知道MySQL开发人员在实现这一毫无意义的限制时会怎么想
我必须使用PHP删除它吗?您的查询似乎比需要的更复杂。我会选择:
delete u
from fe_users u join
fe_users u2
on u.pid = u2.pid and u.username = u2.username and
u2.uid > u.uid
where u.pid = 100;
这将删除具有相同pid和用户名且uid较大的行的所有行。您可以通过将“删除u”更改为“选择u.*”来获取列表。我的第二次尝试包含了错误输出所述的语法错误。 我错过了,还有其他一些错误。这是工作查询:
DELETE FROM fe_users
WHERE uid NOT IN (
SELECT uid FROM (
SELECT uid
FROM fe_users
WHERE pid=100
GROUP BY username
HAVING COUNT(username) > 1
) As uid
)
AND username IN (
SELECT username FROM (
SELECT username
FROM fe_users
WHERE pid=100
GROUP BY username
HAVING COUNT(username) > 1
) AS username
)
AND pid=100
我希望MySQL开发人员能够解决这一问题,这样我们就不需要添加不必要的选择。删除*号,它不在您显示的查询中,但错误消息显示您在实际查询中使用了它。删除查询没有*两个子查询的可能重复项都缺少from子句,即您有SELECT uid SELECT uid from…,它应该是SELECT uid from SELECT uid from。。。。话虽如此,戈登的回答却不那么冗长,因此更易于阅读和维护,最终结果完全相同。@GarethD,你是对的,谢谢!
DELETE FROM fe_users
WHERE uid NOT IN (
SELECT uid (
SELECT uid
FROM fe_users
WHERE pid=100
GROUP BY username
HAVING COUNT(username) > 1
)
) AS uid
AND username IN (
SELECT username (
SELECT username
FROM fe_users
WHERE pid=100
GROUP BY username
HAVING COUNT(username) > 1
)
) AS username;
delete u
from fe_users u join
fe_users u2
on u.pid = u2.pid and u.username = u2.username and
u2.uid > u.uid
where u.pid = 100;
DELETE FROM fe_users
WHERE uid NOT IN (
SELECT uid FROM (
SELECT uid
FROM fe_users
WHERE pid=100
GROUP BY username
HAVING COUNT(username) > 1
) As uid
)
AND username IN (
SELECT username FROM (
SELECT username
FROM fe_users
WHERE pid=100
GROUP BY username
HAVING COUNT(username) > 1
) AS username
)
AND pid=100