表user:
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
mapper方法:
List<Long> listId(@Param("names") List<String> names, @Param("ages") List<Integer> ages, @Param("emails") List<String> emails);
SQL:
<select id="listId" resultType="java.lang.Long">
SELECT id FROM (
<foreach collection="names" item="name">
<foreach collection="ages" item="age">
<foreach collection="emails" item="email">
select id from user where name = #{name} and age = #{age} and email = #{email} union
</foreach>
</foreach>
</foreach>
-- 解决foreach最后一个union的问题
select id from user where 1 != 1
) t
</select>
测试用例和结果: