例: 数据库表1:
| ColA |ColB|
| 1 |A1,A2,A3,A4,A5|
| 2 |B1,B2|
参数输入:A4,A1,A2,A5
我想选择第1行,因为ColB
包含参数输入的所有值。
怎么办?
答案 0 :(得分:2)
首先,正如@Gordon Linoff所说,您需要将数据更改为SQLish,即不要将数据分开,而是将它们分成新行。这可以通过以下方式实现:
注意我已经使用过MS SQL其他版本的SQL会有不同的答案,但方法应该保持不变。
样本表
CREATE TABLE YourData (ColA int, ColB varchar(max))
INSERT INTO YourData VALUES (1,'A1,A2,A3,A4,A5')
INSERT INTO YourData VALUES (2,'B1,B2')
查询(递归公用表表达式)
;WITH CTE (ColA, ColB_new, ColB)
AS
(
SELECT
ColA
,LEFT(ColB,CHARINDEX(',',ColB+',')-1)
,STUFF(ColB,1,CHARINDEX(',',ColB+','),'')
FROM YourData
UNION ALL
SELECT
ColA
,LEFT(ColB,CHARINDEX(',',ColB+',')-1)
,STUFF(ColB,1,CHARINDEX(',',ColB+','),'')
FROM CTE
WHERE ColB >''
)
SELECT
ColA, ColB_new
FROM CTE
ORDER BY ColA
所以你要离开这个:
| ColA |ColB|
| 1 |A1,A2,A3,A4,A5|
| 2 |B1,B2|
对此:
ColA ColB_new
1 A2
1 A3
1 A4
1 A5
1 A1
2 B1
2 B2
然后你添加一个简单的WHERE
条款,例如WHERE ColB_new IN('A4','A1','A2','A5')
如果您想获取有关第一个表(YourData)中的信息的信息:
| ColA |ColB|
| 1 |A1,A2,A3,A4,A5|
然后你可以在ColA上的两个表上做JOIN