2014-03-31 31 views
1

我有这样的查询结果:MySQL的 - 删除数据

enter image description here

这是我想做的事:

IF所有n POST_ID一次指定user_votes==0删除它,因为为例:

我想删除post_id 3086的所有行,因为它们全都有user_votes==0.0

我想删除所有与post_id 3085行,因为他们都有user_votes==0.0

我不惯于与post_id 3060删除任何行,因为他们得到了一些不同的值从0.0(我不想user_votes 0.0太删除post_id 3060

我在想,我可以总结所有user_votes具有相同post_id如果结果是0.0,则删除所有它们。 我怎样才能做到这一点?

问候, 达里奥

编辑:这是SQL表http://www.datafilehost.com/d/967c0109

+0

你可以在这里发布表格数据吗?这个图像将在该网站中丢失 –

回答

0
DELETE FROM MyTable WHERE post_id IN 
(
    SELECT post_id 
    FROM MyTable 
    GROUP BY post_id 
    HAVING SUM(user_votes) = 0 
) 

或者,也许以下几点:

DELETE m.* 
FROM MyTable m 
INNER JOIN (
    SELECT post_id 
    FROM MyTable 
    GROUP BY post_id 
    HAVING SUM(user_votes) = 0 
) r ON m.post_id = r.post_id 
+0

只是几个注意事项 - 他想删除那些是零/ 0 /的,并且据我记得,在子查询中,无法引用从中删除的表。干杯:) – blue

+0

你说得对,我正在研究一个子查询,但是如果我理解如何删除假设表上的正确数据,那么我将弄清楚如何用正确的SELECT做适当的查询。 – Dudo1985

+0

灵儿,你的第二个答案似乎工作,我要做一些额外的测试 – Dudo1985

0

试试这个桌子上的一个副本:

DELETE FROM `TABLE_NAME` 
WHERE `post_id` IN (
    SELECT `post_id` FROM `TABLE_NAME` AS dummy GROUP BY `post_id` HAVING 0=SUM(`user_votes`) 
) 
+0

这样做,我会删除所有具有user_votes = 0.0的行。例如,我将删除具有0.0 user_votes的post_id 3060的所有行。相反,我想保留所有包含post_id 3060的行,甚至包含user_votes 0.0的所有行,这仅仅是因为某些'user_votes'在post_id中具有值<> 0.0 3060 – Dudo1985

+0

@ Dudo1985 - 您可以在*之前添加* WHERE post_id!= 3060 * *拥有** caluse。希望有所帮助。 – blue

+0

结果大约800,我需要做一个动态工作的代码,因为我不知道之前post_id具有所有user_votes为0.0,而不是 – Dudo1985