当一列具有多个代码时,我如何在一个列上联接两个表

时间:2019-05-13 05:39:59

标签: sql sql-server

我有两个表:

表1

    atypcode |  ABRNCHCOD   |   tarikh       |  codel
    1523     |   375        |    1397/06/31  |  375-500-652278-2,375-500-652278-3
    2179     |   344        |    1397/06/31  |  344-800-909999-1,344-800-909999-2
    2175     |   344        |    1397/06/31  |  344-500-1885840-1,344-500-1885840-2
    1523     |   375        |    1397/06/31  |  375-500-2852450-1,375-500-2852450-4
    1523     |   375        |    1397/06/31  |  375-500-651108-1,375-500-651108-2,375-500-651108-3
    4901     |   154        |    1397/06/31  |  154-305-260752-1,154-200-260752-1,154-800-13557-1
    2175     |   344        |    1397/06/31  |  344-500-1075560-1,344-500-1075560-2
    3312     |   344        |    1397/06/31  |  344-500-1885840-1,344-500-1885840-2

表2

tarikh      |   codel               |    mande
1397/06/31  |   115-112-1882936-1   |    2798089.00
1397/06/31  |   115-112-1974907-1   |    72580645.00
1397/06/31  |   115-112-1974907-2   |    19052419.00
1397/06/31  |   115-112-2431483-1   |    0.00
1397/06/31  |   115-112-2472323-1   |    2643835.00
1397/06/31  |   115-112-2559539-1   |    1344235.00
1397/06/31  |   115-112-2807485-1   |    113614.00
1397/06/31  |   115-512-2556810-1   |    0.00
1397/06/31  |   115-512-2986840-1   |    130000000.00
1397/06/31  |   115-512-570205-1    |    0.00

在表1中,表2中仅存在一个编解码器 如何在不带“ in”的情况下基于codel搜索table1中的table2。

谢谢

2 个答案:

答案 0 :(得分:1)

第二个表中的代码似乎都没有与第一个表匹配,而且,您不应该这样存储CSV数据。话虽如此,我们可以尝试以下技巧:

SELECT t2.tarikh, t2.codel, t2.mande
FROM table2 t2
WHERE EXISTS (SELECT 1 FROM table1 t1
              WHERE ',' + t1.codel + ',' LIKE '%,' + t2.codel + ',%');

要了解其工作原理,请考虑表1 codel的值:

375-500-651108-1,375-500-651108-2,375-500-651108-3

我们首先在此值的两边用逗号括起来,得到:

,375-500-651108-1,375-500-651108-2,375-500-651108-3,

然后,我们只需要从表2中搜索一个给定的codel值,该值也用逗号括起来,例如该字符串。搜索,375-500-651108-1,

答案 1 :(得分:0)

https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017

尝试使用字符串拆分功能,并在连接中使用它。请在Select子句中拆分它并使用Alias。

STRING_SPLIT ( string , separator )
相关问题