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

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

e、 如果我的数据表是

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

我还有一个Map表

  1. Codekey, Result
  2. ---------------------------
  3. ABC,OK1
  4. DEF,OK2

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

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

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

hfyxw5xn

hfyxw5xn1#

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

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

ikfrs5lh

ikfrs5lh2#

使用nz可能更简单:

  1. SELECT
  2. DataTable.ID,
  3. DataTable.ColumnA,
  4. DataTable.ColumnB,
  5. DataTable.ColumnC,
  6. Nz([A]![Result],Nz([B]![Result],[C]![Result])) AS MapResult
  7. FROM
  8. ((DataTable
  9. LEFT JOIN MappingTable AS A
  10. ON DataTable.ColumnA = A.Codekey)
  11. LEFT JOIN MappingTable AS B
  12. ON DataTable.ColumnB = B.Codekey)
  13. LEFT JOIN MappingTable AS C
  14. ON DataTable.ColumnC = C.Codekey;

相关问题