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