Mysql 将sql master链接到属性表,然后将属性值表示为列

Mysql 将sql master链接到属性表,然后将属性值表示为列,mysql,sql,join,mariadb,Mysql,Sql,Join,Mariadb,我有一个主对象和属性表,对象可能有0…n个“随机”属性。我想把大师和某些道具链接成一个专栏 你会怎么做?这是我目前的解决方案,它可以正常工作,但以后可能会出现性能问题(?) Select v.code ,(select value from properties where server_id=v.server_id and code=v.code and name='propx') as 'propx' ,(select value from properties where serve

我有一个主对象和属性表,对象可能有0…n个“随机”属性。我想把大师和某些道具链接成一个专栏

你会怎么做?这是我目前的解决方案,它可以正常工作,但以后可能会出现性能问题(?)

Select v.code 
 ,(select value from properties where server_id=v.server_id and code=v.code and name='propx') as 'propx'
 ,(select value from properties where server_id=v.server_id and code=v.code and name='propy') as 'propy'
From masterobj v
Where 
    v.server_id='001'
    and (v.starttime between '2019-11-01 00:00:00' and '2019-11-15 23:59:59')
Order by v.starttime asc;
数据视图模型

masterobj table
001  abc001  2019-11-01 13:01:00
001  abc002  2019-11-01 13:02:00
001  abc003  2019-11-01 13:03:00
001  abc004  2019-11-01 13:04:00
001  abc005  2019-11-01 13:05:00
001  abc901  2019-05-14 09:01:00
properties table
001  abc001  propx  128
001  abc001  propy  64
001  abc001  temp   1
001  abc002  temp   1
001  abc003  temp   0
001  abc003  propx  32
001  abc004  propy  20
Query Results
code    propx propy
abc001  128   64
abc002  
abc003  32
abc004        20
abc005

正如所建议的,这是一个查询,具有多个到同一个表的左连接

Select v.code, p1.value as 'propx', p2.value as 'propy'
From masterobj v
  Left Join properties p1 On (v.server_id=p1.server_id and v.code=p1.code and p1.name='propx')
  Left Join properties p2 On (v.server_id=p2.server_id and v.code=p2.code and p2.name='propy')
Where 
  v.server_id='001'
  and (v.starttime between '2019-11-01 00:00:00' and '2019-11-15 23:59:59')
Order by v.starttime asc;

跳过子查询,改为使用左连接。@jarlh您的意思是我将一个属性表左链接两次,将特定属性名作为行筛选器,将
p1.value作为“propx”,将p2.value作为“propy”
columns?是的,这样做!