T-SQL Выбор активных идентификаторов из списка разделенных запятыми идентификаторов - PullRequest
0 голосов
/ 25 мая 2010

У меня есть две таблицы «Продукт», имеющие следующую структуру:

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.

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"

Существует ли запрос t-sql, который будет возвращать список активных записей из таблицы "ProductAllowed", если для продукта включена или включена какая-либо из трех областей IsSaleType?

На основании данных примера записи ProductAllowed должны возвращать следующие записи:

AMRLSPN
BLGHVF
BLGHVO
BLGSDO
CHOHVP

Это необходимо применять в базе данных SQLSERVER 2000, содержащей записи aprox 150000.

1 Ответ

0 голосов
/ 25 мая 2010

Я не могу это проверить, но это выглядит примерно так ...

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,%' 
...