SQL:连接具有不同列类型的两个表

时间:2020-08-30 19:30:40

标签: mysql sql csv join casting

我有两个带有以下各列的表:

表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连接这两个表,即如何将table1中的SKUs(varchar)列与table2中的SKU(int)列进行比较?

2 个答案:

答案 0 :(得分:3)

我建议将架构标准化为@Sodmond suggested。但是,如果这不是一个选项,则可以使用find_in_set作为连接条件-它将把table2的int隐式转换为字符:

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

答案 1 :(得分:2)

您需要重新设计架构,检查我如何为您重新创建表。

table1:

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


table2:

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

避免在SKU字段中存储多个值,那么您将能够使用联接查询。