首页 > 解决方案 > sql oracle - LIKE 与 LEFT JOIN

问题描述

我有两个表,在表 A 中,我有numbS可以复制的列,每个numbS都有一个startYearand endYear,我想code从表 B 中获取列,其中列startYear和列与endYear列相同year,并且numSFK等于numS

表B

idS numS   year        code
10    1    2017/2018   123
20    2    2016/2017   456    
30    1    2016/2017   789     
40    2    2017/2018   159   

表A

idP  startYear endYear  numSFK
x     2017       2018    2  
w     2016       2017    1    
z     2017       2018    1 

结果

numS   code 
2       159  
1       789    
1       123  

我尝试使用以下查询,但总是将列代码为空

select
    mp.numSFK,        
    sm.code
from tableA mp
         LEFT JOIN TableB sm ON sm.numS = mp.numSFK AND
         mp.startYear LIKE '%' || sm.year || '%' AND mp.endYear LIKE '%' || sm.year  || '%'

标签: sqloracle

解决方案


您应该将tableA startYearendYear值连接在一起以与tableB year列进行比较:

SELECT A.numSFK AS numS,
       B.code
FROM TableA A
LEFT JOIN TableB B ON B.numS = A.numSFK
                  AND B.year = A.startYear || '/' || A.endYear
ORDER BY numS DESC, code DESC

输出:

NUMS    CODE
2       159
1       789
1       123

dbfiddle 上的演示


推荐阅读