我有一个用户表,它本身有一个多对多的关系,我想得到所有具有这个特定关系的用户对。问题是,在关系表中,我像这样存储用户:
+------+---------------+
| User | relation |
+------+---------------+
| id | left_user_id |
| name | right_user_id |
| ... | ... |
+------+---------------+
所以当我做一个基本的
SELECT count(*)
FROM relation LEFT OUTER JOIN user AS user_1 ON user_1.id = relation.left_user_id
LEFT OUTER JOIN user AS user_2 ON user_2.id = relation.right_user_id
GROUP BY left_user_id, right_user_id;
我有时会对同一对得到两个结果(例如有时(adam,eva)和(eva,adam),它们是同一对)。我想要的只是一双:(亚当,伊娃)。
如何做到这一点?
2条答案
按热度按时间but5z9lq1#
你可以使用这些函数
least()
以及greatest()
:或者在不需要连接的情况下:
tcomlyy62#
这个
left join
应该不需要。关键是使用least()
以及greatest()
. 那就是:这种方法需要注意的一点是,结果集中的数据对可能不在原始数据中——按顺序排列。所以,如果数据中有一次“夏娃”/“亚当”,那么它将返回:“亚当”/“夏娃”/1。如果有必要,可以解决这个问题。