我正在编写一个查询,其中我试图在子查询/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 下的行,因为“Mike”和“Sally”存在于 UserID 下。
SELECT *
FROM Users
WHERE '%' + UserPeers + '%' LIKE (SELECT UserID FROM Users)

这里返回的错误是:
子查询返回了 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;

关于sql - 在单个 SQL 语句中使用 LIKE 和 IN 以及子查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15735117/

10-16 17:14
查看更多