【问题标题】:Joining tables with different amount of rows连接具有不同行数的表
【发布时间】:2015-01-24 19:12:21
【问题描述】:

我想加入两个表。

一个表具有以下结构: ID1、ID2、类型、出生日期、性别

其中 ID2 是唯一的,但同一个 ID1 可能有两个不同的 ID2 - 所以此表中有两行。

我想要做的是,将这些值添加到另一个表中,但对于 ID1 和两个 ID2,我不希望有两行,而是添加另一列,如 type2、birth date2、sex2 并仅为 ID1 填充这些值不是唯一的。

我尝试过这样的事情:

在第一步中,我已经将所有 ID1 添加到 type=1 的表中。剩下几个 ID1,其中 type=2。现在我想像这样将这些添加到表格中

create table VB_VT_hvgruppe_LV_PRV_VPVT_HILF as 
select 
    a . *,
    c.ns5_vptypid as ns5_vptypid2,
    c.ns5_gebdat as ns5_gebdat2,
    c.ns5_sex as ns5_sex2
from
    VB_VT_hvgruppe_LV_PRV_VPVT a
        join,
    (select 
        b.ns5_vpvt_ordinal, b.ns5_vptypid, b.ns5_gebdat, b.ns5_sex
    from
        lfglende.ns5_vpvt1 b
    where
        b.ns5_vptypid = '2') as c ON a.ns5_vb_ordinal = b.ns5_vpvt_ordinal
where
    a.ns5_vb_ordinal = c.ns5_vpvt_ordinal

但这不起作用。

你能帮帮我吗?

【问题讨论】:

  • 您可以编辑您的问题并提供示例数据吗?我认为这会澄清逻辑。
  • 调试你的select 没有create table 开始

标签: mysql sql join


【解决方案1】:

你的语法有错误:

VB_VT_hvgruppe_LV_PRV_VPVT a join, (select 

不应该有逗号 - 试试这个:

create table VB_VT_hvgruppe_LV_PRV_VPVT_HILF as 
select 
    a . *,
    c.ns5_vptypid as ns5_vptypid2,
    c.ns5_gebdat as ns5_gebdat2,
    c.ns5_sex as ns5_sex2
from
    VB_VT_hvgruppe_LV_PRV_VPVT a
        join
    (select 
        b.ns5_vpvt_ordinal, b.ns5_vptypid, b.ns5_gebdat, b.ns5_sex
    from
        lfglende.ns5_vpvt1 b
    where
        b.ns5_vptypid = '2') as c ON a.ns5_vb_ordinal = b.ns5_vpvt_ordinal
where
    a.ns5_vb_ordinal = c.ns5_vpvt_ordinal

【讨论】:

    【解决方案2】:

    如果您知道任何特定 ID1 最多有两个 ID2 值,那么您可以将表连接到自身,在“左侧”获取较低的值,在“右侧”获取较高的值。

    select  T1.ID1, T1.ID2, T1.Type, T1.Birthdate, T1.sex
            T2.ID2 as T2ID2, T2.Type as TYPE2, T2.Birthdate as Birthdate2, T2.sex as sex2
    from mytable t1
    left join mytable t2
    on t1.ID1=T2.ID1 and t1.ID2<t2.ID2
    

    如果您不希望 T2 值中出现空值(其中只有一条记录),请在每个字段上使用 COALESCE()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多