如何编写MySQL SQL关联多表查询style表的style_name字段?
搞定Style表名称查询的MySQL语句
没问题,我来帮你梳理下怎么结合给定的表结构写出需要的SQL语句。首先先理清楚各表之间的关联逻辑:
- 产品表
Products和产品风格关联表product_style通过Products.id和product_style.product_id绑定 product_style又通过style_id关联到style表的主键idstyle表的school_id对应schools表的id,还有school_products表用来关联学校和产品
下面根据不同的查询需求,给你对应的SQL写法:
1. 查所有关联产品的风格名称
如果要获取所有和产品有绑定关系的风格名称,直接通过产品→产品风格→风格的关联路径查询就行:
SELECT s.name AS style_name FROM Products p JOIN product_style ps ON p.id = ps.product_id JOIN style s ON ps.style_id = s.id;
用你给的示例数据,这个语句会返回style1、style2、style3这三个风格名称。
2. 查指定产品的关联风格名称
要是只需要看某一个产品(比如id为1的sample1)对应的风格,加个WHERE条件就行:
SELECT s.name AS style_name FROM Products p JOIN product_style ps ON p.id = ps.product_id JOIN style s ON ps.style_id = s.id WHERE p.id = 1; -- 这里替换成你要查的产品ID
执行后就只会返回sample1对应的三个风格。
3. 查指定学校的风格名称
如果想获取某个学校(比如school1)下的所有风格,直接关联schools和style表:
SELECT s.name AS style_name FROM schools sch JOIN style s ON sch.id = s.school_id WHERE sch.name = 'school1'; -- 替换成目标学校名称
示例数据里会返回school1对应的style1、style2。
4. 查学校关联产品的对应风格名称
如果要找某个学校关联的所有产品对应的风格,就得把school_products也加进来关联:
SELECT DISTINCT s.name AS style_name FROM schools sch JOIN school_products sp ON sch.id = sp.school_id JOIN Products p ON sp.product_id = p.id JOIN product_style ps ON p.id = ps.product_id JOIN style s ON ps.style_id = s.id WHERE sch.name = 'school1';
因为你给的示例里sample2和sample3没有对应的风格记录,所以实际返回还是style1、style2、style3,用DISTINCT是为了避免重复的风格名称出现。
小提示
- 如果想包含那些没有关联产品/学校的风格记录,可以把
JOIN改成LEFT JOIN; - 如果结果里有重复的风格名,记得用
DISTINCT去重。
内容的提问来源于stack exchange,提问作者Novice
相关产品推荐
相关产品推荐

