我有两个带有以下各列的表:
表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)列进行比较?
答案 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字段中存储多个值,那么您将能够使用联接查询。