首页 > 解决方案 > 在使用 IN 的内部联接中使用 VARCHAR(Max)(这实际上是一个字符串 [])

问题描述

我想做的是连接两个表。

表 1 将具有此设置

CREATE TABLE Table1
(
   PkId INT Identity(1,1) NOT NULL,
   ListOfProducts VARCHAR(MAX) NULL,
   ProductWareHouse VARCHAR(Max) NULL,
   CONSTRAINT PkId PRIMARY KEY (PkId)
)

表2是这样设置的

CREATE TABLE Table2
(
   PkId INT Identity(1,1) NOT NULL,
   Product VARCHAR(MAX) NULL,
   ProductCost DECIMAL(38,2) NOT NULL, 
   CONSTRAINT PkId PRIMARY KEY (PkId)
)

表 1ListOfProducts是真正的string[]表 2 和表 1 的Product链接ListOfProducts

我真正想要完成的是两个表的内部连接,看起来ListOfProducts实际上完成了内部连接,所以像这样

SELECT * 
FROM TABLE1 
INNER JOIN TABLE 2 ON Product IN(ListOfProducts)
WHERE ProductWareHouse = 'Warehouse1' 

ListOfProducts值看起来像这样:[Oranges, Apples].

标签: c#sqlarrays

解决方案


方法一:

JOIN ... ON ListOfProducts like '%' + Product + '%'

方法二:先去掉左右括号,然后:

JOIN ... ON Product in (select value from string_split(ListOfProducts,', '))

两者都非常低效。


推荐阅读