SQL动态查询:匹配User表为1字段对应Cidade表type的实现方法
解决方案
你可以通过在关联后的WHERE条件中做动态匹配实现需求,调整后的SQL如下:
SELECT c.estado_id, c.version_id, c.name, c.[type], uv.user_id FROM cidade c INNER JOIN userst uv ON c.estado_id = uv.estado_id -- 此处替换为需要查询的任意user_id即可 WHERE uv.user_id = 1 AND ( (c.[type] = 'shopping' AND uv.shopping = 1) OR (c.[type] = 'mercado' AND uv.mercado = 1) OR (c.[type] = 'feira' AND uv.feira = 1) )
逻辑说明
- 关联逻辑保持原有按
estado_id关联两张表的规则不变 - 新增的条件段会自动匹配
cidade表的type值和userst表中对应字段的值:只有用户对应类别字段为1时,才会返回该类别的城市记录 - 只需修改
uv.user_id = ?中的参数值,即可查询任意用户的匹配结果,完全符合动态查询要求 - 当
user_id=1时,返回结果和期望结果完全一致:用户mercado字段为0,所以type为mercado的两条记录会被过滤,仅保留shopping和feira对应的两条记录
如果后续需要新增更多类别,只需在WHERE的OR条件组里新增对应匹配规则即可。
内容的提问来源于stack exchange,提问作者Felipe Santos
相关产品推荐
相关产品推荐

