我在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
但这给了我所有学生的推荐计数,即使是那些录取编号相同的学生也是如此。
答案 0 :(得分:2)
使用关联的子查询与exists
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)
上有一个索引,它应该具有最佳的性能特征。