简体   繁体   中英

mysql query to move unique rows to temp table

I want to create a query to move every unique entry from one table to another temporary table. I created the following query to get the unique entrys:

select date, messageType, zCampaignId, isSenderPolicy, sender, recipient, policy, operator, country, zNumber 
from topcampaigns_HOUR 
group by date, messageType, zCampaignId, isSenderPolicy, sender, recipient, policy, operator, country, zNumber 
having count(*) = 1;

and it returns lots of results:

/* Affected rows: 0  Found rows: 473  Warnings: 0  Duration for 1 query: 0.000 sec. (+ 0.016 sec. network) */

However when I put this into an update I cant seem to get the tmp table updated:

UPDATE topcampaigns_HOUR_tmp as b 
INNER JOIN (
   select date, messageType, zCampaignId, isSenderPolicy, sender, recipient, policy, operator, country, zNumber 
   from topcampaigns_HOUR 
   group by date, messageType, zCampaignId, isSenderPolicy, sender, recipient, policy, operator, country, zNumber 
   having count(*) = 1) as a 
SET 
b.date=a.date, 
b.messageType=a.messageType, 
b.zCampaignId=a.zCampaignId, 
b.isSenderPolicy=a.isSenderPolicy, 
b.sender=a.sender, 
b.recipient=a.recipient, 
b.policy=a.policy,
b.operator=a.operator,
b.country=a.country, 
b.zNumber=a.zNumber;

which resulted in:

/* Affected rows: 0  Found rows: 0  Warnings: 0  Duration for 1 query: 00:04:25 */

I tried an number of things like using:

UPDATE topcampaigns_HOUR_tmp JOIN (select date, messageType, zCampaignId, isSenderPolicy, sender, recipient, policy, operator, country, zNumber from topcampaigns_HOUR group by date, messageType, zCampaignId, isSenderPolicy, sender, recipient, policy, operator, country, zNumber having count(*) = 1) a SET 
topcampaigns_HOUR_tmp.date=a.date, 
topcampaigns_HOUR_tmp.messageType=a.messageType, 
topcampaigns_HOUR_tmp.zCampaignId=a.zCampaignId, 
topcampaigns_HOUR_tmp.isSenderPolicy=a.isSenderPolicy, 
topcampaigns_HOUR_tmp.sender=a.sender, 
topcampaigns_HOUR_tmp.recipient=a.recipient, 
topcampaigns_HOUR_tmp.policy=a.policy, 
topcampaigns_HOUR_tmp.operator=a.operator, 
topcampaigns_HOUR_tmp.country=a.country, 
topcampaigns_HOUR_tmp.zNumber=a.zNumber;

Again I got:

/* Affected rows: 0  Found rows: 0  Warnings: 0  Duration for 1 query: 00:03:42 */

The topcampaigns_HOUR_tmp table never seems to get updated.

What am I doing wrong?

A

If you're adding rows you need INSERT , and if you're adding rows from query results you need INSERT ... SELECT . Try something like this:

INSERT INTO topcampaigns_HOUR_tmp (
   date, messageType, zCampaignId, isSenderPolicy, sender,
   recipient, policy, operator, country, zNumber)
select
   date, messageType, zCampaignId, isSenderPolicy, sender,
   recipient, policy, operator, country, zNumber 
from topcampaigns_HOUR 
group by
   date, messageType, zCampaignId, isSenderPolicy, sender,
   recipient, policy, operator, country, zNumber 
having count(*) = 1

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM