MYSQL如何从3张不同的关联表中查询获取5个指定字段值
问题原因
你使用UNION的场景不符合需求:UNION的作用是垂直拼接多个查询的结果行,要求所有子查询的列数量、数据类型顺序完全一致,拼接后会直接沿用第一个查询的列名,自然不会为AR相关字段生成独立列。你需要的是通过多表关联水平拼接不同表的字段。
你原有代码的额外问题
你写的UNION语句中第二个查询的WHERE条件引用了别名a,但第二个查询的表别名是b,仅从语法层面这段代码也无法正常运行。
正确实现代码
直接以中间关联表为驱动做三表关联即可,代码如下:
SELECT sc.SC_Name, sc.SC_Description, ar.AR_Name, ar.AR_Description, ar.id AS AR_id FROM Key_SCAR ks LEFT JOIN Service_Category sc ON ks.SC_id = sc.id LEFT JOIN Area_Responsibility ar ON ks.AR_id = ar.id WHERE ks.KS_id = 1;
逻辑说明
- 以存储关联关系的
Key_SCAR作为驱动表,筛选条件KS_id = 1直接加在驱动表上,查询效率更高 - 通过
LEFT JOIN分别关联两张基础数据表,按需取对应字段即可 - 如果要求仅返回两张基础表都匹配到的有效记录,把
LEFT JOIN替换为INNER JOIN即可
内容的提问来源于stack exchange,提问作者Brendon
相关产品推荐
相关产品推荐

