连接具有不同行数的表

时间:2014-11-26 12:38:39

标签: mysql sql join

我想加入两张桌子。

一个表具有以下结构: 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

但这不起作用。

你可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

语法错误:

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

答案 1 :(得分:0)

如果您知道任何特定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()。