Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在查询中与SELECT进行部分匹配?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 如何在查询中与SELECT进行部分匹配?

Sql 如何在查询中与SELECT进行部分匹配?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我不确定在另一个问题中是否存在这种确切的情况,因此,如果这是重复的,那么很抱歉。我使用的分类系统有问题,我有以下查询(例如) 我需要在tblLookup中的CategoryCode和tblStock中的CategoryCode之间进行部分匹配-上面的查询返回完整匹配,例如EG将有ETC和EGT作为返回的类别代码,但是如果类别是ETCE,则将找不到。 我如何修改查询,以便从以下位置返回结果: SELECT CategoryCode FROM tblLookup WHERE CategoryID

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

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

SELECT CategoryCode 
FROM tblLookup 
WHERE CategoryID = 'EG'
可用于tblStock中的部分匹配,其中返回的CategoryCodes为ETC和EGT,但也需要通配符匹配

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

@Tuomas:In
sqlserver
In
JOIN
更高效:@Quassnoi:Hmm。。。链接不错,谢谢!我尝试过类似的方法,但当我进行连接时,它只与“=”一起工作,而不与最后一部分的like一起工作,因为它不会返回任何结果,除非它是完全匹配的。@Rogue:我添加了一个示例脚本来演示这一原理。感谢这个示例-这是我自己的错误-结果是我的查找表中有空格,这是在它被转换时出现的-这就是问题所在-再次感谢!帮我找出了真正的问题!
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