SQL基于内部联接将列添加到表

时间:2017-04-22 13:45:13

标签: sql inner-join

我有两个火鸟桌,T1& T2。

T1 columns: pid, ean, desc

A T1 record: 1234, '102030', 'the desc'

T2 columns: eid, many_eans, eandesc 

A T2 record: 4321, '634232;**102030**;273728', 'the ean desc'

我可以使用此选择查询获取我的结果:

select  T1.pid
      , T1.ean
      , T1.desc
      , T2.eandesc

  from table1 as T1
inner
  join table2 as T2 
    on T1.ean like '%' || T2.many_eans || '%'

但是查询花了太长时间,因此我想在T1中添加一个类似于计算依据的列,它将T2.eandesc文本添加到T1表中,其中T1.ean就像%T2.many_eans%

添加列后,我会执行此查询以获取数据。

select pid, ean, desc, eandesc from T1

如何将T2.eandesc添加到T1?

1 个答案:

答案 0 :(得分:1)

目前,您的T2表未进行规范化,并且您将CSV数据存储在many_eans列中。我建议你重组T2,以便每个记录出现一个ean,例如

T2 columns: eid, ean, eandesc 

4321, '634232', 'the ean desc'
4321, '102030', 'the ean desc'
4321, '273728', 'the ean desc'

然后,以下简单连接就足以获得结果:

select
    T1.pid
    T1.ean
    T1.desc
    T2.eandesc
from table1 as T1
inner join table2 as T2 
    on T1.ean = T2.ean

请注意,如果给定的ean在您当前的某个字符串中出现多次,则可以使用select distinct来确保您不会从T1获得重复的结果在你的结果集中。