场景 有一张test表: 需求:需要查询仅洗过西服和运动鞋的手机号。 分析: 解决: 在尝试了很多办法,从一开始直接单表查询的 where 、连接查询、嵌套查询,依旧将手机尾号5083的用户查询出来。终于在最后求救大佬,他的思路是字符串拼接,也就是将多行转成一行。 SELECT phone FROM ( SELECT phone, GROUP_CONCAT(clothName) b FROM test GROUP BY phone) a WHERE a.b = '西服,运动鞋'; 子查询先将多行转成一行。 在子查询的结果集上做过滤。