关联user、product、file三张表查询满足指定状态条件的产品
满足条件的产品查询方案
关联关系说明
- user表与product表为一对多关系(一个用户对应多个产品)
- product表与file表为一对多关系(一个产品对应多个文件)
查询需求
需要筛选出同时满足以下两个条件的产品:
- user表中
status字段值为1 - file表中
status字段值为1
SQL查询语句
方法一:多表JOIN关联查询
SELECT DISTINCT p.* FROM user u JOIN product p ON u.id = p.user_id JOIN file f ON p.id = f.product_id WHERE u.status = 1 AND f.status = 1;
方法二:子查询+EXISTS判断
SELECT * FROM product p WHERE p.user_id IN (SELECT id FROM user WHERE status = 1) AND EXISTS ( SELECT 1 FROM file f WHERE f.product_id = p.id AND f.status = 1 );
语句说明
DISTINCT用于避免因单个产品对应多个符合条件的文件而返回重复的产品记录- JOIN方式通过外键直接关联三张表,在WHERE子句中一次性过滤用户和文件的状态条件
- 子查询方式先筛选出状态合法的用户ID,再检查每个产品是否存在状态合法的关联文件,逻辑更清晰
内容的提问来源于stack exchange,提问作者morteza heydari
相关产品推荐
相关产品推荐

