T-SQL从逗号分隔的ID列表中提取活动ID

时间:2010-05-25 01:48:34

标签: tsql filter sql-server-2000

我有两个表“Product”具有以下结构:

ProductID,ProductName, IsSaleTypeA, IsSaleTypeB, IsSaleTypeC
1, AAA, N, N, N
2, BBB, N, Y, N  -- active 
3, CCC, N, N, N
4, DDD, Y, N, N  -- active
5, EEE, N, N, N
6, FFF, N, N, N
7, FFE, N, N, N
8, GGG, N, N, N
9, HHH, Y, N, N  -- active

第二个表“ProductAllowed”具有以下结构,其中ProductID是逗号分隔的字符串,根据IsSaleType模式混合有效和无效产品ID。

ProductCode, ProductIDs
AMRLSPN, "1,2"
AMRLOFD, "1,3"
BLGHVF,  "2,4,6"
BLGHVO,  "2,4"
BLGHVD,  "3,5"
BLGSDO,  "0"
CHOHVF,  "1,6"
CHOHVP,  "1,2,7,8"

如果为产品启用了三个IsSaleType文件中的任何一个,是否有t-sql查询将返回“ProductAllowed”表中的活动记录列表?

根据示例数据,ProductAllowed记录应返回以下记录:

AMRLSPN
BLGHVF
BLGHVO
BLGSDO
CHOHVP

这需要在包含aprox 150000记录的SQLSERVER 2000数据库中应用。

1 个答案:

答案 0 :(得分:0)

我无法测试这个,但它就是这样......

SELECT PRODUCTCODE
FROM
    ProductAllowed PA
    JOIN
    (
    SELECT CAST(ID AS varchar(10)) AS ProductID
    FROM PRODUCT WHERE
    IsSaleTypeA = 'Y' OR 
    IsSaleTypeB = 'Y' OR
    IsSaleTypeC = 'Y'
    ) P ON
           PA.ProductIDs LIKE '"P.ProductID,%' OR 
           PA.ProductIDs LIKE '%,P.ProductID"' OR 
           PA.ProductIDs LIKE '%,P.ProductID,%'