一个sql查询来形成数据

时间:2009-06-30 06:57:19

标签: mysql

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

3 个答案:

答案 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的宽度

与此类似,您可以添加所需的其他列 确定