SQL表连接:如何将两行关联数据合并为一行
问题解答
不能实现。要把卧室和浴室的颜色数据合并到一行,必须依赖bedroom_color_id和bathroom_color_id这两个字段作为关联table_two的逻辑依据——这两个字段是table_one与table_two之间,对应卧室、浴室颜色的唯一关联键。
为什么当前查询返回两行?
你当前的查询用t1.id = t2.id关联,能返回对应卧室、浴室颜色的两行,只是数据巧合:table_two里恰好有两条记录的Id和table_one的Id匹配,且这两条记录分别对应卧室和浴室的颜色。但这种关联逻辑完全不严谨,一旦table_two新增其他与t1.id匹配的记录,查询结果会彻底混乱。
正确的合并写法(必须用到color_id字段)
要稳定合并成一行,需要两次关联table_two,分别通过bedroom_color_id和bathroom_color_id获取对应颜色数据:
SELECT t1.Id, -- 卧室颜色相关字段 bedroom_color.red_value AS bedroom_red, bedroom_color.blue_value AS bedroom_blue, bedroom_color.yellow_value AS bedroom_yellow, -- 浴室颜色相关字段 bathroom_color.red_value AS bathroom_red, bathroom_color.blue_value AS bathroom_blue, bathroom_color.yellow_value AS bathroom_yellow FROM table_one AS t1 LEFT JOIN table_two AS bedroom_color ON t1.bedroom_color_id = bedroom_color.color_id LEFT JOIN table_two AS bathroom_color ON t1.bathroom_color_id = bathroom_color.color_id
为什么绕不开这两个字段?
table_two存储的是颜色的RGB值,每条记录对应一种颜色。要区分“卧室颜色”和“浴室颜色”,必须通过table_one里的bedroom_color_id和bathroom_color_id来定位table_two中对应的颜色记录——没有这两个字段,数据库无法判断哪条颜色记录对应卧室、哪条对应浴室,自然没法稳定合并成一行。
内容的提问来源于stack exchange,提问作者xxx
相关产品推荐
相关产品推荐

