t1表: 代表着uid给to_uid 送了礼物,字段如下:
uid,to_uid
a,b
a,c
b,c
t2表:代表uid的关注者follow_uid,字段如下:
uid,follow_uid
a,b
b,c
求输出:
uid,to_uid,relation
说明:
用户uid给用户to_uid刷了礼物,求用户uid与用户to_uid的互相关注类型relation,
0代表两者互不关注,
1代表用户uid关注了用户to_uid,
2代表用户to_uid关注了用户uid,
3代表互相关注。
Solution:
代码语言:javascript复制SELECT uid,
to_uid,
sum(relation) relation
FROM (
-- to_uid关注了uid
SELECT
t1.uid,
t1.to_uid,
CASE WHEN t2.uid IS NULL THEN 0 ELSE 2 END AS relation
FROM t1
LEFT JOIN t2
ON t1.uid = t2.uid
AND t1.to_uid = t2.follow_uid
UNION ALL
-- uid关注了to_uid
SELECT
t1.uid,
t1.to_uid,
CASE WHEN t2.uid IS NULL THEN 0 ELSE 1 END AS relation
FROM t1
LEFT JOIN t2
ON t1.uid = t2.follow_uid
AND t1.to_uid = t2.uid
) t
GROUP BY uid,to_uid;