有没有办法在mysql中找到具有相同列的行

时间:2019-05-03 04:32:08

标签: mysql sql

我在MySQL中有一个名为accounttransactions的表,用于存储财务交易。现在,这里有两列,ref分别代表参考号和adm代表学生的招生号。我想在此表中找到具有相同交易编号但不同学生的学生数量,请记住,一个学生可以多次使用同一交易编号。 I.E

---------------
| adm  | ref  |
--------------
| 102  | 2145 |
| 102  | 2145 |
| 103  | 2152 |
| 104  | 2152 |
---------------

对于入场102,裁判没有问题。我想找到像录取103和104这样的行。

我尝试使用

SELECT COUNT(ref) AS num, ref FROM accounttransactions GROUP BY ref HAVING num>1

但这给了我所有学生的推荐计数,即使是那些录取编号相同的学生也是如此。

3 个答案:

答案 0 :(得分:2)

使用关联的子查询与exists

DEMO

select * from  accounttransactions a 
where exists 
   (select 1 from accounttransactions b where a.ref=b.ref having count(distinct adm)>1)

输出:

adm ref
103 2152
104 2152

答案 1 :(得分:1)

我已经使用自我连接来查找输出

SELECT e.* 
FROM accounttransactions e 
INNER JOIN accounttransactions f ON e.ref = f.ref 
WHERE e.adm != f.adm 
GROUP BY e.ref, e.adm

答案 2 :(得分:1)

我会使用exists,但不能用于聚合:

select a.*
from accounttransactions a 
where exists (select 1 
              from accounttransactions a2
              where a2.ref = a.ref and
                    a2.adm <> a.adm
             );

accounttransactions(ref, adm)上有一个索引,它应该具有最佳的性能特征。