首页 > 解决方案 > SQL:连接具有不同类型列的两个表

问题描述

我有两个包含以下列的表:

表格1:

OrderID    RetailerName    SKUs (varchar)    OrderDate
-------------------------------------------------------
123        ABC             1,2               2016-11-11
124        DEF             3,4               2016-11-12

表 2:

SKU(int)          Product
--------------------------
1                 xx
2                 xy
3                 xz
4                 yx

预期输出:

OrderID   RetailerName   OrderDate   Product
--------------------------------------------
  123     ABC            2016-11-11  xx
  123     ABC            2016-11-11  xy
  124     DEF            2016-11-12  xz
  124     DEF            2016-11-12  yx

如何根据SKU即如何将SKUstable1 中的(varchar) 列与SKUtable2 中的(int) 列进行比较来连接这两个表?

标签: mysqlsqlcsvjoincasting

解决方案


我建议按照@Sodmond 的建议规范化架构。但是,如果这不是一个选项,您可以将find_in_set其用于连接条件 - 它会将 int 从隐式转换table2为字符:

SELECT t1.OrderID, RetailerName, OrderDate, Product
FROM   table1 t1
JOIN   table2 t2 ON FIND_IN_SET(t2.sku, t1.skus) > 0

推荐阅读