MySQL跨表校验查询:按关联字段筛选符合条件的货币数据
解决方案
固定场景实现
如果y_table的列名是固定的{currency}_{type}格式,且组合不多,直接用CASE语句匹配对应列即可:
SELECT x.currency FROM x_table x CROSS JOIN y_table y WHERE x.continent = 'Asia' AND CASE x.type WHEN 'Dual' THEN y.Rupee_Dual WHEN 'Single' THEN y.Yen_Single -- 有新的currency/type组合时,添加对应的WHEN分支 END = 1;
执行后只会返回Rupee,Yen因对应列值为0被排除。
通用场景实现
如果后续会频繁新增currency或type,用动态SQL可以自动适配:
-- 设置目标大洲 SET @target_continent = 'Asia'; -- 构造动态查询语句 SET @sql = ( SELECT GROUP_CONCAT( 'SELECT currency FROM x_table WHERE continent = ''', @target_continent, ''' AND currency = ''', currency, ''' AND EXISTS (SELECT 1 FROM y_table WHERE `', CONCAT(currency, '_', type), '` = 1)' SEPARATOR ' UNION ' ) FROM x_table WHERE continent = @target_continent ); -- 执行动态SQL PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
这个方案会自动根据x_table中的记录拼接查询条件,无需手动修改代码。
内容的提问来源于stack exchange,提问作者micronyks
相关产品推荐
相关产品推荐

