如何删除两个表上的内连接重复

时间:2018-01-31 11:05:12

标签: mysql database repeat

我有两张桌子: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

但我无法弄清楚如何做到这一点。

1 个答案:

答案 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"。