SQL查询问题:从父记录归集信息至子记录结果不符
解决方案
要让所有parent表的记录都关联child表中的Acer、Aspire信息,你需要调整关联逻辑,不再按m_id进行匹配,而是让每个parent记录都绑定固定的make和model值,或者关联child表中特定的目标记录。
方法1:直接指定固定值
如果Acer和Aspire是固定需要显示的内容,直接在SELECT中定义常量即可:
SELECT T1.m_id, T1.child_id, 'Acer' AS make, 'Aspire' AS model, T1.op_status FROM parent T1
方法2:从child表中动态获取目标值
如果需要从child表中动态获取Acer、Aspire(比如后续该记录可能更新),可以先通过子查询提取该组信息,再与parent表做无条件关联:
SELECT T1.m_id, T1.child_id, T2.make, T2.model, T1.op_status FROM parent T1 CROSS JOIN ( -- 提取child表中m_id=1的唯一make和model(去重避免生成重复行) SELECT DISTINCT make, model FROM child WHERE m_id = 1 ) T2
也可以用左连接实现相同效果:
SELECT T1.m_id, T1.child_id, T2.make, T2.model, T1.op_status FROM parent T1 LEFT JOIN ( SELECT DISTINCT make, model FROM child WHERE m_id = 1 ) T2 ON 1=1
原方法无效的原因
- 内连接(你最初的SQL)只会返回
m_id在两张表中都存在的记录,所以仅能拿到m_id=1的结果。 - 普通左连接按
T1.m_id = T2.m_id关联时,只有m_id=1的parent记录能匹配到child数据,其他记录的make和model自然为NULL。
内容的提问来源于stack exchange,提问作者MCIT Trends
相关产品推荐
相关产品推荐

