我有两张桌子:A"父母"表tableA
和"孩子"每个父行有很多行的表,如下所示:
tableA
a_id email role
1 abc@gmail admin
2 abc2@gmail teacher
3 abc2@gmail student
tableB
b_id a_id meta_key meta_value
1 1 first name
2 1 last name
3 1 mobileno 989898989
4 2 first name
5 2 last name singh
我希望数据包含列:
a_id, email, first_name, last_name, mobileno
但我无法弄清楚如何做到这一点。
答案 0 :(得分:0)
你需要加入孩子"对于每个不同的行,您需要一次表格:
select
a.a_id,
email,
b1.meta_value as first_name,
b2.meta_value as last_name,
b3.meta_value as mobileno
from tablea a
left join tableb b1 on b1.a_id = a.a_id
and b1.meta_name = 'first name'
left join tableb b2 on b2.a_id = a.a_id
and b2.meta_name = 'last name'
left join tableb b3 on b3.a_id = a.a_id
and b3.meta_name = 'mobileno'
我选择了外部(即left
)联接,因此即使tableb中缺少某些相应的数据,您仍然可以从tablea获取行。
以" meta"开头的列名称不包含元数据,它们包含普通的普通数据。 "元数据"是数据关于数据,而不是"额外"数据;例如,手机号码不会描述其他数据值。
您应该考虑将列重命名为" data_name"和" data_value"。