MySQL DELETE With a Sub-Query using Having and Count
Am trying to DELETE several entries using the following Query:
First i find the entries that i want to delete using this query:
SELECT guid FROM account GROUP BY guid,type HAVING count(type) > 1);
Then i add this query to the DELETE statement开发者_如何转开发:
DELETE FROM account WHERE guid IN (SELECT guid FROM account GROUP BY guid,type HAVING count(type) > 1);
But i get this error:
You can't specify target table 'account' for update in FROM clause
I think you need to use temporary table to achieve your need as below:
Step1: Create temp table
CREATE TEMPORARY TABLE MyTemp SELECT guid FROM account GROUP BY guid,type HAVING count(type) > 1;
Use the temp table in your delete statement
DELETE FROM account WHERE guid IN (SELECT guid FROM MyTemp);
Drop the temp table
DROP TEMPORARY TABLE MyTemp;
EDIT: I think a work around with *two nested tables also works:
DELETE FROM account
WHERE guid IN
(SELECT guid FROM
(SELECT guid FROM account
GROUP BY guid,type HAVING count(type) > 1) as MyTemp
)
Your problem is solved,just do as following..
DELETE FROM account
WHERE guid IN
(SELECT * FROM
(SELECT guid FROM account
GROUP BY guid,type
HAVING count(type) > 1) AS a);
First create view
create view view_acct as
SELECT guid FROM account
GROUP BY guid,type HAVING count(type) > 1;
After use view
DELETE FROM account WHERE guid in (select * from view_acct);
精彩评论