SELECT DISTINCT g.* FROM epms_group g LEFT JOIN epms_member m ON m.saas_group_id = g.saas_group_Id LEFT JOIN epms_visit_country v ON v.saas_group_id = g.saas_group_Id WHERE 1 = 1 AND g.status = #{status} ORDER BY create_date DESC 这样就可以直接使用一个参数来进行查询,不需要使用 foreach 标签了写foreach可以只传一个状态吗
时间: 2024-03-02 19:52:24 浏览: 18
是的,可以只传一个状态,使用 foreach 标签也是可以的。例如:
```
SELECT DISTINCT g.*
FROM epms_group g
LEFT JOIN epms_member m ON m.saas_group_id = g.saas_group_Id
LEFT JOIN epms_visit_country v ON v.saas_group_id = g.saas_group_Id
WHERE 1 = 1
AND g.status IN (
<foreach collection="status.split(',')" item="item" separator=",">
#{item}
</foreach>
)
ORDER BY create_date DESC
```
这样写的话,如果只传递一个状态,就可以正常查询,如果传递多个状态,也可以正常查询。
相关问题
SELECT DISTINCT g.* FROM epms_group g LEFT JOIN epms_member m ON m.saas_group_id = g.saas_group_Id LEFT JOIN epms_visit_country v ON v.saas_group_id = g.saas_group_Id WHERE 1 = 1 <if test="status !=null and status != ''"> and g.status in #{status} </if> order by create_date desc 前端传到后端的状态是多个 比如一,二,三,四, 这里的sql该怎么写
你的 SQL 可以这样写:
```
SELECT DISTINCT g.*
FROM epms_group g
LEFT JOIN epms_member m ON m.saas_group_id = g.saas_group_Id
LEFT JOIN epms_visit_country v ON v.saas_group_id = g.saas_group_Id
WHERE 1 = 1
AND g.status IN (
<foreach collection="status.split(',')" item="item" separator=",">
#{item}
</foreach>
)
ORDER BY create_date DESC
```
这里使用了 MyBatis 的 foreach 标签,将前端传递过来的状态字符串按照逗号分隔为多个参数,然后在 SQL 中进行 IN 查询。
SELECT DISTINCT m.* FROM sys_menu m LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id LEFT JOIN sys_role r ON r.role_id = rm.role_id WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) AND m.TYPE = 0 ORDER BY m.order_num
这是一条 SQL 查询语句,用于查询指定用户所拥有的菜单权限。具体来说,该语句会查询 sys_menu 表中所有类型为菜单的记录,并且这些菜单所对应的角色中包含该用户所拥有的角色的记录。查询结果按照菜单的 order_num 字段进行排序。其中,`?` 表示一个占位符,需要在执行查询时传入实际的用户 ID 值。