如何从learned-moves表筛选同时学会两个指定招式的宝可梦数据
实现方案
你当前的语句用了OR所以只会匹配满足任意一个招式的记录,要筛选同时掌握两个指定招式的宝可梦,可以用以下两种常用方法:
方法1:分组聚合+HAVING过滤
这种方法逻辑更简洁,适合固定筛选2个及以上招式的场景:
SELECT `Pokemon`, `Version Group` FROM `learned-moves` WHERE `Version Group` = ? AND `Move` IN (?, ?) GROUP BY `Pokemon`, `Version Group` HAVING COUNT(DISTINCT `Move`) = 2;
说明:如果需要返回该宝可梦在对应版本下的所有招式明细,可以把上面的查询作为子查询,和原表关联匹配
Pokemon和Version Group字段即可。
注意:SQL中单引号是用来包裹字符串值的,不要用来标注表名、字段名这类标识符,你的表名和字段名包含连字符、空格这类特殊字符,需要用反引号包裹才不会触发语法错误。
方法2:表自连接
如果你需要直接返回两个招式的对应学习条件等明细信息,可以用自连接的方式:
SELECT lm1.*, lm2.* FROM `learned-moves` lm1 JOIN `learned-moves` lm2 ON lm1.`Pokemon` = lm2.`Pokemon` AND lm1.`Version Group` = lm2.`Version Group` WHERE lm1.`Version Group` = ? AND lm1.`Move` = ? AND lm2.`Move` = ?;
说明:这个查询会把同一只宝可梦、同一个版本组下两个招式的学习信息放在同一行返回,适合需要同时查看两个招式学习条件的场景。
内容的提问来源于stack exchange,提问作者LEGEND383
相关产品推荐
相关产品推荐

