I try to get a list of all UIDs from table fe_users
which are redundant and then run my DELETE command to delete them.
e.g. I have this table (fe_users):
uid | pid | username
--------------
1 | 100 | hans
2 | 100 | karl
3 | 100 | franz
4 | 100 | karl
5 | 100 | hans
This is how I select all duplicates:
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
)
Returns:
uid | pid | username
--------------------
5 | 100 | hans
4 | 100 | karl
Now I have to delete them.
Attempt #1:
(Hint: Just replaced SELECT
from above Query with DELETE
)
DELETE * 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
)
Response:
You can't specify target table 'fe_users' for update in FROM clause
Attempt #2
So I tried to use one more select, like suggested in this answer.
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;
Response:
Syntax error near 'SELECT uid FROM fe_users WHERE pid=0 GROUP BY usernam' at line 4
I don't know how I can do this and i wonder what the MySQL Developers where thinking by implementing this senseless restriction.
Do I have to delete it by using PHP?