Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在具有重复列值的行中查找差异_Mysql_Group By_Duplicates - Fatal编程技术网

MySQL在具有重复列值的行中查找差异

MySQL在具有重复列值的行中查找差异,mysql,group-by,duplicates,Mysql,Group By,Duplicates,假设我有一个表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 我

假设我有一个表
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
我想找到
id
sequence
相同而
card\u轻触
time
不相同的行

它应该会回来

id sequence card_tap time
1    1         61      1
1    1         62      10 
2    12        62       10
2    12        61       20
就凭这个

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

这假设每个
{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 
选择t1*
来自taps t1
连接接头t2
在t1.id=t2.id上
t1.sequence=t2.sequence
其中t1.time t2.time
或t1.卡式点击t2.卡式点击

如果有两行以上,则会得到重复的行,因此可能需要添加
DISTINCT

数据似乎未规范化。无论如何,根据您的标记,我猜您正在寻找返回所有结果的内容,如:

select distinct * from taps;


您需要添加一个带有
索引的唯一
ID
,以更好地处理数据。

如果您看到OP expected Output
2 12
我想您误解了问题哦,好的。。然而,这是一个非常糟糕的解释:“id和sequence是相同的”我解释id=sequence…您有一个名为
id
的字段,但这不是唯一的标识符?这是一个关系表吗?id和序列是相同的,所以id=序列??预期输出id=2 seq=12??问题somewhere@leo
ID=ID
sequence=sequence
我打赌这个问题是由非规范化数据集引起的。请注意,在缺少主键的情况下,您并没有真正的表,而且,在尝试针对此数据集构建查询时,您可能会遇到一些严重的困难。@为什么您认为需要distinct?是这样的,或者t1.time>t2。time@Strawberry我有
其中t1.time t2.time
@草莓行{1,1,61,1}只与自身和{1,1,62,10}匹配由于其本身的值相同且未选中,因此只返回一个匹配项。因此我认为不需要它。但您可以向我展示一个示例,其中有重复的行。@草莓是的,我感觉不错,只是有点饿了;)。您的示例添加了另一行,不在OP问题中。但别担心,我已经包含了该假设n答案以防万一,添加distinct as additional fix以防万一,这是一种可能返回所有行。但是我想你可以添加
HAVING AVG()MAX()
@JuanCarlosOropeza你在哪里想出
AVG()
MAX()
值?它们不寻找限制,只是复制记录。检查OP desire output。您需要返回id=id、seq=seq但time或tap不同的行。您的解决方案返回所有行。但如果您分组,您可以判断它们是否有不同的值检查avg()max()
select * from taps group by card_tap,time;