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?
 
     
    