使用INNER JOIN查询设置表满足多个匹配条件的仓库记录
这个需求完全可以在单条SQL查询中实现,不需要分两次执行查询,常见实现方案如下:
方案1:双关联查询(可读性高、性能表现好)
分别将两个设置项作为独立的关联表绑定到仓库表,各自做条件过滤:
SELECT wms.* FROM wms INNER JOIN wms_setting s_active ON wms.wms_id = s_active.wms_wms_id AND s_active.name = 'active' AND s_active.value_int = 1 INNER JOIN wms_setting s_notify ON wms.wms_id = s_notify.wms_wms_id AND s_notify.name = 'dispatch_notification_method' AND s_notify.value_str = 'pull'
只有两个关联关系都命中的仓库才会被返回,符合你的筛选要求。
方案2:聚合分组查询(适合多条件扩展)
如果后续需要扩展更多设置项校验,用聚合+HAVING的写法会更简洁:
SELECT wms.* FROM wms INNER JOIN wms_setting s ON wms.wms_id = s.wms_wms_id WHERE (s.name = 'active' AND s.value_int = 1) OR (s.name = 'dispatch_notification_method' AND s.value_str = 'pull') GROUP BY wms.wms_id HAVING COUNT(DISTINCT s.name) = 2
逻辑为先筛选出满足任意一个设置条件的行,按仓库ID分组后,统计命中的不同设置项数量刚好等于2,就说明两个条件都满足。如果你的设置表不会出现同一个仓库同一个name重复存储的情况,也可以把COUNT(DISTINCT s.name)简化为COUNT(*)。
内容的提问来源于stack exchange,提问作者HippoDuck
相关产品推荐
相关产品推荐

