如何检查行中的元素是否存在于其他列的某个位置而不是同一行

时间:2018-04-18 03:03:23

标签: sql

我有一个SQL表如下

--------------------------
| REPO | USER | FOLLOWER |
--------------------------
|  A   |   1  |    3     |
|  A   |   2  |    4     |
|  A   |   3  |    6     |
|  B   |   2  |    7     |
|  B   |   4  |    2     |
|  C   |   5  |    3     |
|  C   |   2  |    6     |
|  C   |   6  |    5     |
--------------------------

现在,我想只关注USER跟随另一个USER的那些行 相同的REPO。 即我想要行,其中FOLLOWER中的元素也在USER中 REPO。

OUTPUT应该像......

--------------------------
| REPO | USER | FOLLOWER |
--------------------------
|  A   |   1  |    3     |
|  B   |   4  |    2     |
|  C   |   6  |    5     |
|  C   |   2  |    6     |
--------------------------

谢谢你:)

2 个答案:

答案 0 :(得分:0)

一种简单方法使用exists

select t.*
from t
where exists (select 1 from t t2 where t2.repo = t.repo and t2.follower = t.user);

答案 1 :(得分:0)

输出实际上不应该如下,即4行?

--------------------------
| REPO | USER | FOLLOWER |
--------------------------
|  A   |   1  |    3     |
|  B   |   4  |    2     |
|  C   |   6  |    5     |
|  C   |   2  |    6     |
--------------------------