【问题标题】:Joining tables with data from multiple categories使用来自多个类别的数据连接表
【发布时间】:2014-06-18 07:32:54
【问题描述】:

我有一个名为 items_data 的表中的项目数据。

对于每一行,我有 3 列包含类别标签(cat1、cat2、cat3)。有的属于三个类别,有的只包含 1 个类别,其中 cat2 和 cat3 会有一个空单元格。

类别标签是出现在另一个名为 cat_label 的表中的 ID,该表包含两列,一列带有 ID,一列带有类别名称。

我想连接这两个表以形成一个新表,这样如果项目属于两个类别,则将创建两行,输出将是两列,一列包含项目,一列包含其类别。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    使用UNION ALL

    select a.item, b.name
    from items_data a
    join cat_label b on a.cat1 = b.id
    union all 
    select a.item, b.name
    from items_data a
    join cat_label b on a.cat2 = b.id
    union all
    select a.item, b.name
    from items_data a
    join cat_label b on a.cat3 = b.id
    

    【讨论】:

    • 我认为,在这种情况下,'union' 和 'union all' 会给出相同的结果集。
    • @VinitPrajapati,在这种情况下,UNION ALL 更快,因为它跳过了重复数据删除部分
    【解决方案2】:
    select i.cat1, c.cat_label from items_data i inner join cat_label c on i.cat1 = c.id
    union
    select i.cat2, c.cat_label from items_data i inner join cat_label c on i.cat2 = c.id
    union
    select i.cat3, c.cat_label from items_data i inner join cat_label c on i.cat3 = c.id
    

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      相关资源
      最近更新 更多