Как сделать частичное совпадение с запросом SELECT IN? - PullRequest
2 голосов
/ 24 февраля 2010

Я не уверен, что есть такая точная ситуация в другом вопросе, так что извините, если это дубликат. У меня проблема с системой категорий, которую я использую. У меня следующий запрос (например)

SELECT DISTINCT COUNT(StockID)
FROM tblStock
WHERE CategoryCode IN (
SELECT CategoryCode 
FROM tblLookup 
WHERE CategoryID = 'EG')

Мне нужно сделать частичное совпадение между CategoryCode в tblLookup и Code Category в tblStock - приведенный выше запрос возвращает полные совпадения, например, EG будет иметь ETC и EGT в качестве возвращаемых кодов Category, однако если категория ETCE, тогда не найден.
Как я могу изменить запрос, чтобы результаты возвращались из:

SELECT CategoryCode 
FROM tblLookup 
WHERE CategoryID = 'EG'

Может быть использовано для частичного сопоставления в tblStock, где возвращаются коды категорий ETC и EGT, но также требуются совпадения с подстановочными знаками.

1 Ответ

2 голосов
/ 24 февраля 2010
SELECT  COUNT(StockID)
FROM    (
        SELECT  DISTINCT '%' + CategoryCode + '%' AS Expr
        FROM    tblLookup
        WHERE   CategoryID = 'EG'
        ) cats
JOIN    tblStock s
ON      s.CategoryCode LIKE cats.Expr

Пример сценария для воспроизведения:

DECLARE @tblStock TABLE (StockID INT NOT NULL, CategoryCode VARCHAR(100) NOT NULL, quantity FLOAT NOT NULL)
DECLARE @tblLookup TABLE (CategoryID VARCHAR(100) NOT NULL, CategoryCode VARCHAR(100) NOT NULL)

INSERT
INTO    @tblStock
VALUES  (1, 'ETCE', 100)

INSERT
INTO    @tblStock
VALUES  (2, 'ETC', 200)

INSERT
INTO    @tblStock
VALUES  (3, 'FOO', 300)

INSERT
INTO    @tblLookup
VALUES  ('EG', 'ETC')

INSERT
INTO    @tblLookup
VALUES  ('EG', 'EGT')

SELECT  *
FROM    (
        SELECT  DISTINCT '%' + CategoryCode + '%' AS Expr
        FROM    @tblLookup
        WHERE   CategoryID = 'EG'
        ) cats
JOIN    @tblStock s
ON      s.CategoryCode LIKE cats.Expr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...