我有两个表“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数据库中应用。
答案 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,%'