【问题标题】:MySQL find difference in rows with duplicate column valuesMySQL在具有重复列值的行中找到差异
【发布时间】:2018-08-01 08:16:56
【问题描述】:

假设我有一张桌子TAPS

id sequence card_tap time
1    1         61      1
1    1         62      10 
1    2          2      20
1    2          2      20
2    11        12       5
2    11        12       5
2    12        62       10
2    12        61       20

我想找到idsequence 相同而card_taptime 不同的行。

它应该返回

id sequence card_tap time
1    1         61      1
1    1         62      10 
2    12        62       10
2    12        61       20

【问题讨论】:

  • 您有一个名为id 的字段,但这不是唯一标识符?这是关系表吗?
  • id 和序列相同,所以 ID = SEQUENCE ??和预期的输出 id =2 seq = 12 ??某处有问题
  • @leo ID = IDsequence = sequence
  • 我敢打赌,这个问题是由非标准化数据集引起的。 en.wikipedia.org/wiki/Database_normalization
  • 请注意,在没有 PRIMARY KEY 的情况下,您实际上并没有一个表,而且,在尝试针对该数据集构建查询时,您可能会遇到一些严重的困难。跨度>

标签: mysql group-by duplicates


【解决方案1】:

假设每个{id,sequence}只有两行

SELECT t1.*
FROM taps t1
JOIN taps t2
  ON t1.id = t2.id
 AND t1.sequence = t2.sequence
WHERE  t1.time <> t2.time
   OR  t1.card_tap  <> t2.card_tap 

如果你有超过两行,你会得到重复的行,所以可能需要添加DISTINCT

【讨论】:

  • @strawberry 为什么你认为需要与众不同?
  • 嗯,要么就是那个,要么就是 t1.time > t2.time
  • @Strawberry 我有WHERE t1.time &lt;&gt; t2.time
  • @Strawberry row {1,1,61,1} 仅与自身匹配,与 {1,1,62,10} 与自身匹配,值相同且未被选中,因此只有一个匹配被退回。所以我认为DISTINCT 不需要它。但是你可以给我看一个有重复行的示例。
  • @Strawberry 是的,我感觉还可以,只是有点饿;)。您的示例添加了另一行不在 OP 问题中。但是请放心,我已经在答案中包含了该假设,以防万一,并添加 distinct 作为附加修复以防万一
【解决方案2】:

就这么简单?

Select * from tabs where id = sequence and card_tap != time 

【讨论】:

  • 如果您看到 OP 预期输出 2 &lt;&gt; 12
  • 我想你误解了这个问题
  • 哦,好吧..但是这是非常糟糕的解释:“id和sequence是相同的”我解释id = sequence...
【解决方案3】:

数据似乎没有标准化。无论如何,根据您的标记,我猜您正在寻找返回所有结果的东西,例如:

select distinct * from taps;

select * from taps group by card_tap,time;

您需要添加一个唯一的ID 和一个Index 以更好地处理数据。

【讨论】:

  • 返回所有行。不过我猜你可以加HAVING AVG() &lt;&gt; MAX()
  • @JuanCarlosOropeza 您在哪里提出avg()max() 值?他们不是在寻找限制,只是重复记录。
  • 检查 OP 期望输出。您需要返回 id=id, seq=seq 但时间或抽头不同的行。您的解决方案返回所有行。但是,如果您分组,您可以判断它们是否具有不同的值,检查 avg() max()
猜你喜欢
  • 2018-03-16
  • 2011-06-23
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 2015-12-18
  • 2017-08-18
  • 1970-01-01
相关资源
最近更新 更多