我正在编写一个查询,其中我试图在子查询/ CTE中搜索通配符子字符串,并将此逻辑嵌套在我的CASE语句中。例如:
SELECT CASE WHEN '%' + text + '%' IN (SELECT Column1 FROM Table) THEN 'I am in Column1' ELSE text END FROM Table
不幸的是,似乎没有办法做到这一点。由于我需要使用LIKE运算符,因此无法同时使用LIKE和IN。我将不得不分别编写每个LIKE语句,这将用于1000多个行。有人推荐更直接的解决方案吗?预先感谢!
-编辑:对不起,每条评论有一些澄清。一个更好的例子:
UserID | UserPeers | Gender -------------------------------------------- Mike | Tom1, Bob1 | M John | Tom1, Greg1 | M Sally |Mike1, John1 | F Sara | Sally1, Bob1 | F
在上表中,我需要在UserPeers列中搜索子字符串,以查看它们是否存在于UserID列中的任何位置。在这种情况下将成功返回的行将是Sally和Sara下的行,因为UserID下存在“ Mike”和“ Sally”。
SELECT * FROM Users WHERE '%' + UserPeers + '%' LIKE (SELECT UserID FROM Users)
此处返回的错误是:子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
SELECT UserID, CASE WHEN EXISTS ( SELECT 1 FROM dbo.Users WHERE UserPeers LIKE '%' + u.UserID + '%' ) THEN 'I am in Column1' ELSE UserID END FROM dbo.Users AS u;