【问题标题】:MySQL query with duplicates and exclusion of other duplicates具有重复项并排除其他重复项的 MySQL 查询
【发布时间】:2016-03-23 21:15:26
【问题描述】:

标题可能令人困惑,但我会尝试解释我正在尝试做的事情。 我有一个 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”。 我认为这样的事情是可能的,但我无法理解。请问你能帮帮我吗? 谢谢。

【问题讨论】:

    标签: mysql


    【解决方案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”的重复项?我已经尝试了几件事,但到目前为止都没有奏效。
    • Reverted :) - 不太清楚你所说的“相同的“poster_ip”和“poster_id”是什么意思。你在说SELECT DISTINCT t1.poster_id, t1.poster_ip吗?
    • 我的意思是:该查询检索到我的三行具有完全相同的“poster_ip”和“poster_id”。我不在乎看到那三行,我在乎的是只看到相同“poster_ip”和“poster_id”的一种组合。因为我们谈论的是一个有 500.000 条记录和超过 11.000 个重复项的数据库,所以消除这些重复项对我来说非常重要。现在清楚了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多