故事:我有两个学生表。我需要为表A中的每个学生查找表B中是否有更年轻且具有相同姓名的学生。
表A(非真实的表,可能是用户输入)
| 身份证|姓名|年龄|
| - ------|- ------|- ------|
| 无|吉姆|十二|
| 1个|千斤顶|十三|
| 第二章|汤姆|二十三|
表B
| 身份证|姓名|年龄|
| - ------|- ------|- ------|
| 无|吉姆|十四|
| 1个|吉尔|十个|
| 第二章|时间|八个|
| 三个|千斤顶|十二|
这是我当前的sql查询:
select * from table where name=jim and age<12 or name=jack and age<13 or ......
假设我必须过滤掉与输入过滤条件匹配的行(表A),并且where关键字后面可能会有1000多个成对的姓名和年龄组合条件,我尝试过这种方法,可以使用mybatis foreach生成查询,但效率非常低。如何优化上述查询?
2条答案
按热度按时间holgip5t1#
参见:DBFIDDLE
当您只需要查找未超过100岁的学生(
WHERE age<100
)时,您只需要固定比较使用
tableA.name = tableB.name
将比较表A中的名称和表B中的名称y1aodyip2#
试试这个:
如果您在
(name,age)
或name
上定义索引,它将更快,性能更高!