小编典典

在单个SQL语句中使用LIKE和IN以及子查询

sql

我正在编写一个查询,其中我试图在子查询/ 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)

此处返回的错误是:子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。


阅读 268

收藏
2021-04-28

共1个答案

小编典典

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;
2021-04-28