select * From V_Product
orderNumber | ProductCode | orderDate | status
10100 | S18_1749,S18_2248,S18_4409,S24_3969 | 2003-01-06 |Shipped
10101 | S18_2325,S18_2795,S24_1937,S24_2022 | 2003-01-09 |Shipped
--------------------------------------------------------------------
select *From products
productCode | productName | productLine | productScale
S10_1678 | 1969 Harley Davidson Ultimate Chopper | Motorcycles | 1:10
S10_1949 | 1952 Alpine Renault 1300 |Classic Cars | 1:10
-----------------------------join---------------------------------------
select *From products a inner join V_Product b
on( a.productCode = b.ProductCode or a.productCode = substring(b.ProductCode,CHARINDEX(',',b.ProductCode)+1,8))
我要如何使用charindex而不是仅将所有产品代码组合在一起?
答案 0 :(得分:1)
修复您的数据模型!不要将内容列表存储在字符串中!这不是存储多个值的SQL方法。您应该有一张表格,每个订单号和产品代码一行。
有时我们会被别人的非常,非常,非常糟糕的设计决策所束缚。如果是这样,您可以使用like
:
select *
from products p inner join
V_Product vp
on ',' + vp.productCode + ',' like '%,' + p.ProductCode + ',%';
无需将列与=
进行比较; like
会解决这个问题。
请注意,这是“分隔符安全的”。因此,如果您有两个产品代码S-100和S-1000,则不会混淆。
答案 1 :(得分:0)
您尝试过这样的事情吗?
SELECT * FROM products a
INNER JOIN V_Product b ON a.ProductCode = b.ProductCode OR b.ProductCode LIKE '%' + a.ProductCode + '%'