select 条条件多次出现的行 sql

select rows where criteria appears more than once sql

我对 MySQL 有一个看法,我想过滤掉那些 temID 对特定用户多次出现的行。

假设数据样本是:


id  name    ques    temID

55  peter   1993    680
55  peter   1994    680
55  peter   1476    680
55  peter   1879    684
55  peter   1440    686
55  peter   1440    686
55  peter   1438    686
55  peter   1921    687
55  peter   1922    687
55  peter   1921    687
56  john    1853    684
56  john    1853    684
56  john    1539    687
56  john    1998    1512
56  john    2281    1534
56  john    2282    1534
56  john    2282    1534

我希望结果是


id  name    ques    temID

55  peter   1993    680
55  peter   1994    680
55  peter   1476    680
55  peter   1440    686
55  peter   1440    686
55  peter   1438    686
55  peter   1921    687
55  peter   1922    687
55  peter   1921    687
56  john    1853    684
56  john    1853    684
56  john    2281    1534
56  john    2282    1534
56  john    2282    1534

应删除这三行,因为每个用户的 temID 只出现一次:


id  name    ques    temID

55  peter   1879    684
56  john    1539    687
56  john    1998    1512

我试过了

select * from v_tem 
WHERE temID IN
    (     SELECT temID
          FROM v_tem 
          GROUP BY id, temID
          HAVING COUNT(*) > 1
    )
GROUP BY id, temID
ORDER BY id, temID;

但结果是


id  name    ques    temID

55  peter   1993    680
55  peter   1994    680
55  peter   1476    680
55  peter   1879    684
55  peter   1440    686
55  peter   1440    686
55  peter   1438    686
55  peter   1921    687
55  peter   1922    687
55  peter   1921    687
56  john    1853    684
56  john    1853    684
56  john    1539    687
56  john    2281    1534
56  john    2282    1534
56  john    2282    1534

只有


id  name    ques    temID

56  john    1998    1512

已删除。

我的猜测是,因为 temID 684 在 john 中出现了不止一次,所以它通过了 where 子句,即使它在 peter 中只出现了一次。 temID 687 也是如此。即使它只在 john 中出现一次,因为它在 peter 中出现了两次,所以它没有被 where 子句省略。

请帮忙!

select o.*
from v_tem o join 
(select id,temID from v_tem group by id,temID having count(1)>1) t
on o.id=t.id and o.temID=t.temID

t table 给你所有出现不止一次的 id-temID 组。

所以加入原来的tableot给你所有你需要的记录。

sql fiddle 这里 [http://sqlfiddle.com/#!9/b69790/1]

您需要使用 join 才能获得正确的输出。您的内部查询 return 只有 temId,它对不同的用户是重复的。

记录 55-684 未被删除,因为 temId 684 正在为用户 56 return编辑。其他人也是如此。

您的 table 中似乎没有可以在您的内部查询中使用的主键,因此您需要对 id 和 temId 使用连接条件。