如何与SELECT IN查询进行部分匹配?

时间:2010-02-24 12:35:27

标签: sql sql-server sql-server-2008

我不确定在另一个问题中是否存在这种确切情况,如果这是重复的话,那就很抱歉。我在使用的类别系统有问题我有以下查询(例如)

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

我需要在tblLookup中的CategoryCode和tblStock中的类别代码之间进行部分匹配 - 上面的查询返回完整匹配,例如EG将ETC和EGT作为返回的类别代码,但是如果类别是ETCE那么这将是找不到。
我如何修改查询以便从以下结果返回结果:

SELECT CategoryCode 
FROM tblLookup 
WHERE CategoryID = 'EG'

可用于tblStock中的部分匹配,其中返回的CategoryCodes是ETC和EGT,但也需要通配符匹配。

1 个答案:

答案 0 :(得分:2)

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