You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL技术问询:查找指定模块下含指定用户的列名

解决方案

你的问题出在UNION ALL的子查询没有包含module_name字段,导致外层WHERE无法引用这个条件进行过滤。只需要在每个子查询里同时选出module_name,就能实现需求。

修正后的基础查询

SELECT col 
FROM (
   SELECT "view_only" AS col, view_only AS value, module_name FROM module_access
   UNION ALL 
   SELECT "limited_access", limited_access, module_name FROM module_access
   UNION ALL 
   SELECT "full_access", full_access, module_name FROM module_access
) allValues
WHERE value LIKE '%user4,%' 
  AND module_name = 'accounts';

更严谨的匹配优化(避免部分用户名误匹配)

如果存在类似user44这种用户名,直接用%user4,%可能会误匹配。可以通过拼接逗号的方式,确保匹配完整的用户名:

SELECT col 
FROM (
   SELECT "view_only" AS col, view_only AS value, module_name FROM module_access
   UNION ALL 
   SELECT "limited_access", limited_access, module_name FROM module_access
   UNION ALL 
   SELECT "full_access", full_access, module_name FROM module_access
) allValues
WHERE CONCAT(',', value, ',') LIKE '%,user4,%' 
  AND module_name = 'accounts';

额外建议

从表结构来看,你用逗号分隔存储多个用户的设计不符合数据库规范化原则,会导致查询效率低、维护困难。建议拆分出关联表,比如module_access_users,结构如下:

  • module_name (VARCHAR)
  • access_type (VARCHAR,存储view_only/limited_access/full_access)
  • username (VARCHAR)
    这样后续权限查询会更高效,也更容易维护数据。

内容的提问来源于stack exchange,提问作者Nimesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:50:28