如何通过自连接查询同group_id下所有location_id相同的行
正确查询语句
使用左连接匹配同组内不同location_id的记录,过滤无匹配的结果即可直接得到目标数据,无需嵌套子查询:
SELECT loc1.* FROM location_data loc1 LEFT JOIN location_data loc2 ON loc1.group_id = loc2.group_id AND loc1.location_id != loc2.location_id WHERE loc2.group_id IS NULL;
逻辑说明
- 左连接的关联条件限定了只匹配同一group_id下、location_id不相等的记录
- 如果
loc2.group_id IS NULL,说明当前loc1对应的group_id下,没有任何和当前location_id不同的记录,也就是该组所有行的location_id完全一致 - 最终返回的结果和你给出的预期输出完全匹配
内容的提问来源于stack exchange,提问作者Azathoth
相关产品推荐
相关产品推荐

