MySQL的:
Table_A
------------
id name
1 Name1
2 Name2
Table_B
------------
a_id type value
1 width 100
1 height 100
1 color red
2 width 50
2 height 80
不知道Table_B中存在多少类型值。
如何获得结果:
id name width height color
1 Name1 100 100 red
2 Name2 50 80 null
答案 0 :(得分:1)
SELECT a.id, a.name, b_Width.value AS width, b_Height.value AS height, b_color.value AS color
FROM Table_A AS a
JOIN Table_B AS b_Width
ON b_Width.a_id = a.id AND b_Width.type = 'width'
JOIN Table_B AS b_Height
ON b_Height.a_id = a.id AND b_Height.type = 'height'
JOIN Table_B AS b_Color
ON b_Color.a_id = a.id AND b_Color.type = 'color'
但请认真考虑重新设计您的架构。值是保持颜色和线性尺寸,如果设计不同,它会更好。
保持TableA的方式,然后有一个名为Details的表,其中包含宽度/高度/颜色列。或者有一个名为Size with width / height列的表和一个名为Color的表,其中包含颜色名称或RGB值。每个附加表当然都有一个FK到TableA,可能会也可能不会用作该表的PK。
答案 1 :(得分:1)
好吧,我不建议对数据库使用EAV反模式,因为它基本上保存了结构化数据库中的非结构化数据,但我不得不与之前一次战斗,所以这里比内连接要快得多
选择a.id,a.name, max(b.type ='height'然后b.value结束时的情况)作为高度, max(b.type ='width'然后b.value end的情况)作为宽度, max(b.type ='color'然后b.value结束时的情况)作为颜色 来自test.tablea a,test.tableb b其中a.id = b.a_id 分组由a.id
答案 2 :(得分:0)
使用带有子查询的选择查询
喜欢select table,Name,(从table_B中选择类型,其中a_id = table_A.id和type ='width')作为table_A的宽度
与此类似,您可以添加所需的其他列 确定