sql左键将一个表连接到多个具有优先级的字段

kyks70gy  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(227)

e、 如果我的数据表是

ID,ColumnA, ColumnB, ColumnC
--------------------------------
1,ABC,111,DEF
2,111,ABC,DEF
3,111,111,DEF

我还有一个Map表

Codekey, Result
---------------------------
ABC,OK1
DEF,OK2

我要实现的是将表left join数据表与columna、columnb和columnc同时Map。
如果columna可以左联接Map表的结果,那么就服从columna
否则,结果以B列为准
如果columna和columnb没有离开联接Map表结果,则服从columnc。
所以左连接优先级是columna>columnb>columnc
下面是我想要的结果:

ID,ColumnA, ColumnB, ColumnC,Result
 -----------------------------------
 1,ABC,111,DEF,OK1 
 2,111,ABC,DEF,OK1
 3,111,111,DEF,OK2

你知道吗?我试着寻找老问题,但似乎没有类似的情况。谢谢!:)

hfyxw5xn

hfyxw5xn1#

SELECT * FROM DATA D
LEFT JOIN MAPPING M ON (CASE WHEN D.ColumnA=M.Codekey THEN D.ColumnA=M.Codekey
WHEN D.ColumnB=M.Codekey THEN D.ColumnB=M.Codekey
WHEN D.ColumnC=M.Codekey THEN D.ColumnC=M.Codekey
END)

你可以用 CASE WHEN 有条件的。
尝试上面的代码,这将帮助你。

ikfrs5lh

ikfrs5lh2#

使用nz可能更简单:

SELECT 
    DataTable.ID, 
    DataTable.ColumnA, 
    DataTable.ColumnB, 
    DataTable.ColumnC, 
    Nz([A]![Result],Nz([B]![Result],[C]![Result])) AS MapResult
FROM 
    ((DataTable 
LEFT JOIN MappingTable AS A 
    ON DataTable.ColumnA = A.Codekey) 
LEFT JOIN MappingTable AS B 
    ON DataTable.ColumnB = B.Codekey) 
LEFT JOIN MappingTable AS C 
    ON DataTable.ColumnC = C.Codekey;

相关问题