我有一个mysql表,它将用户与一个类似下图或sqlfiddle的对话相关联:
mysql表截图
http://sqlfiddle.com/#!9月29日
如您所见,用户1000001和用户1000002都属于2个会话-10和20。
我需要做的是检索对话id,其中只有用户1000001和用户1000002与之关联。正确的会话id是10。
正如您可以看到的,第三个用户与会话\u id 20关联-1000003-因此我不想拉取该会话\u id,即使用户1000001和1000002与之关联。
另外请注意,如果只有一个用户标识与会话标识相关联,则不会出现这种情况。
非常感谢你的帮助!
3条答案
按热度按时间dwthyt8l1#
如果我们假设每个会话至少有两个参与者,那么我们可以删除其他人在场的所有会话,只留下这两个用户在场的会话。
注:我们需要上述假设,因为在某些情况下
1000001
是唯一的参与者,我们不想展示这些对话。编辑:
如果可能只有一个用户id与一个会话id相关联,我们也可以删除这些会话。
假设同一个用户id不会在同一个会话中出现两次。
eivnm1vs2#
这是一种性能方法,完全不使用子查询。您只需在中筛选出结果即可
Having
子句,使用条件聚合:结果
db fiddle视图
条件聚合的另一个可能变体是:
cetgtptt3#
我还没有测试过这个代码,但是我很确定它在逻辑上是合理的。你没说table的名字,所以我就叫它table。