MySQL查询中的重复项和排除其他重复项

4
标题可能有些令人困惑,但我将尝试解释我要做的事情。 我有一个MySQL表,其中我需要的字段是:
  • poster_ip
  • poster_id
现在,我正在编写一个查询,它会将该表中具有“poster_ip”重复计数大于或等于2的所有结果返回给我(它会显示是否有更多结果使用相同的“poster_ip”)。 这很容易:
SELECT * 
FROM NAME_OF_TABLE
INNER JOIN (
SELECT poster_ip
FROM NAME_OF_TABLE
GROUP BY poster_ip
HAVING COUNT( poster_ip ) >1
)dup ON NAME_OF_TABLE.poster_ip = dup.poster_ip

如果它没有进行优化或对数据库服务器造成了巨大负载,我并不太关心,因为这不是我的问题。它能正常工作。此外,我需要“SELECT *”,因为我需要查看整行。

现在有一个棘手的部分(至少对我来说):我需要查询仅返回“poster_ip”的重复项,其中不同的“poster_id”使用相同的“poster_ip”。也就是说,我需要检查是否有不同的“poster_id”正在使用相同的“poster_ip”。

我认为这种事情是可能的,但我无法理解。你能帮帮我吗?谢谢。

1个回答

1
SELECT DISTINCT t1.*
FROM NAME_OF_TABLE t1
INNER JOIN NAME_OF_TABLE t2
  ON t1.poster_ip = t2.poster_ip
  AND t1.poster_id <> t2.poster_id

好的,公平地说,查询SELECT DISTINCT t1.* FROM cmc_posts t1 INNER JOIN cmc_posts t2 ON t1.poster_ip = t2.poster_ip AND t1.poster_id <> t2.poster_id对我来说更有用。实际上,它几乎是完美的。有没有办法消除同时使用相同的“poster_ip”和“poster_id”的重复项?我尝试了一些方法,但迄今为止都没有成功。 - vale.maio2
已还原 :) - 不太确定您所说的“poster_ip”和“poster_id”是否都相同。您是在谈论SELECT DISTINCT t1.poster_id, t1.poster_ip吗? - JimmyB
我的意思是:该查询会检索出三行完全相同的“poster_ip”和“poster_id”。我不在乎看到这三行,我关心的是只看到相同的“poster_ip”和“poster_id”的一种组合。由于我们正在处理一个具有500,000条记录和超过11,000个重复项的数据库,因此消除这些重复项对我来说非常重要。现在更清楚了吗? - vale.maio2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接