【问题标题】:how to remove repetition on inner join on two table如何删除两个表上的内部连接的重复
【发布时间】:2018-01-31 11:05:12
【问题描述】:

我有两个表:一个“父”表 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

但我不知道该怎么做。

【问题讨论】:

  • 请花点时间,a) 修正您的格式,b) 包括您已经尝试过的查询。
  • 您的意思是 GROUP BY 您希望它们分组的某个字段?

标签: mysql database repeat


【解决方案1】:

您需要为每个需要从中获取数据的不同行加入一次“子”表:

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'

我选择了outer(即left)连接,因此即使tableb 中缺少一些相应的数据,您仍然可以从tablea 中获取该行。


以“meta”开头的列名不包含元数据,它们包含普通的普通数据。 “元数据”是关于数据的数据,而不是“额外”数据;例如手机号码不描述其他数据值。

您应该考虑将列重命名为“data_name”和“data_value”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多