MySQL:如何调整查询从两张关联表获取同行情报并过滤数据?
调整后的SQL查询语句
推荐写法(内关联,仅返回存在有效表单的版本记录)
SELECT fv.display_name, fv.version_num, f.form_name FROM form_version fv INNER JOIN form f ON fv.form_id = f.form_id WHERE fv.active = 1 AND f.removed = 0;
可选写法(左关联,保留无对应表单的版本记录)
如果需要保留form_version中未匹配到有效form的记录(此时form_name会显示为NULL),可以将表单过滤条件放在关联逻辑中:
SELECT fv.display_name, fv.version_num, f.form_name FROM form_version fv LEFT JOIN form f ON fv.form_id = f.form_id AND f.removed = 0 WHERE fv.active = 1;
关键调整说明
- 移除了原查询中冗余的子查询,直接通过
fv.active = 1筛选激活的版本记录 - 通过
INNER JOIN(或LEFT JOIN)关联form表,利用form_id字段建立两表关联 - 添加
f.removed = 0条件过滤掉已标记删除的表单数据 - 为表名设置别名(
fv对应form_version,f对应form),简化语句结构并提升可读性
内容的提问来源于stack exchange,提问作者pgam
相关产品推荐
相关产品推荐

