【问题标题】:Remove all query results that have duplicates (NOT DISTINCT)删除所有重复的查询结果(NOT DISTINCT)
【发布时间】:2015-06-21 00:50:49
【问题描述】:

我有一个包含两组整数值的表。使用 MySQL,我想显示与第二列中唯一条目相对应的所有行。基本上我可以有重复的 A 值,但只有唯一的 B 值。如果 B 中的某个值存在重复项,则删除具有该值的所有结果。如果我使用DISTINCT,我仍然会得到其中一个我不想要的副本。我也想避免使用COUNT()。这是一个例子:

|_A____B_|
| 1    2 |
| 1    3 |
| 2    2 |
| 2    4 |
| 1    4 |
| 5    5 |

将有以下结果 (1,3), (5,5)。 B 中任何重复的值都将被删除。

【问题讨论】:

  • Ricca,检查我的解决方案..tested 并且有效

标签: mysql count duplicates unique distinct


【解决方案1】:

试试这个

SELECT * FROM TEMP WHERE B IN (
  SELECT B FROM TEMP GROUP BY B Having COUNT(B)=1
 );

我知道您想避免使用 COUNT(),但这是快速解决方案。

在这里工作 - http://sqlfiddle.com/#!9/29d16/8

【讨论】:

    【解决方案2】:

    经过测试并且有效!你需要至少 count(*) 来计算值

     select * from test where B in (
       select B from test  group by B  having count(*)<2
     )
    

    【讨论】:

      【解决方案3】:

      我不知道您为什么要避免使用 count(),因为这样可以达到以下目的:

      假设您的表名为“mytable”

      SELECT t1.A, t1.B
      FROM mytable t1
      JOIN (
          SELECT B, count(*) AS B_INSTANCES
          FROM mytable
          GROUP BY B
          HAVING count(*) = 1
      ) t2 ON t2.B = t1.B
      ORDER BY t1.A, t1.B
      

      【讨论】:

      • 这是作业的特定要求。表中的值也可以在其他表中找到,并且可以通过相应的表进行查询,但我希望有一种更简单的方法。那我会一直想办法的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2018-12-08
      • 2011-12-09
      • 2017-06-17
      • 2017-12-15
      • 1970-01-01
      • 2017-07-02
      相关资源
      最近更新 更多