当前位置: 首页 > 面试题库 >

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

柯星辰
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 在SQL中,有什么方法可以缩短语法 到 一次又一次地在子句中写入相同的列名是不可行的。 问题答案: 没有没有办法将LIKE与IN 直接 结合 __ 有很多解决方法,例如本例中的SQL Server 这会将多个OR搜索条件更改为行和JOIN 或者,您可以使用UNION将多个查询合并为一个

  • 问题内容: 我们正在尝试为本地sql查询动态生成IN子句以返回JPA实体。Hibernate是我们的JPA提供程序。我们的代码看起来像这样。 这是行不通的,in子句无法识别通过这种方式传入的任何值。有谁知道解决这个问题的方法吗? 问题答案: 在您的情况下,JPA支持命名列表参数:

  • 问题内容: 我目前正在制作一份报告,向我显示我们销售团队涵盖的所有邮政编码。 每个团队涵盖100多个邮政编码。我想做的是创建一个报告,将邮政编码内的客户带回去。目前,我的代码如下所示。 我希望的是有一种更快,更轻松的方式来做到这一点。任何建议将不胜感激。有没有一种方法可以为每个销售团队创建变量,例如 只是在钓鱼的想法。干杯 问题答案:

  • 问题内容: 我有一张表格,其中包含有关零售店的信息。我有一个零售链名称的列表(WalMart,Target,Eaton等)。当用户选择一个时,我基本上会运行一个查询来查找与该链有关的任何内容。 例如,如果用户选择“ WalMart”,则查询将返回名称中带有单词“ WalMart”的任何内容(WalMart Scarborough,WalMart Supercenter Toronto,WalMar

  • 问题内容: 有没有办法同时使用LIKE和IN? 我想实现这样的目标。 所以基本上,我希望能够用一堆不同的字符串来匹配该列。是否有另一种方法可以对一个查询执行此操作,还是我必须遍历要查找的字符串数组? 问题答案: 您可以通过在一个查询中将各个LIKE与OR串在一起来完成此操作: 请注意,像LIKE和per-row函数之类的东西并不总是能够很好地扩展。如果表可能会变大,则 可能 需要考虑向表中添加另一

  • 问题内容: 我对此情况有疑问。 我在存储过程中有这样的查询: 我的问题是,这容易受到SQL注入的攻击吗?我需要将其更改为以下内容吗?(?) 问题答案: 快速的答案是不。为了易于进行SQL注入,必须使用动态SQL执行。 这 将很容易受到攻击: 这也意味着这两个示例之间没有真正的区别(至少从安全角度而言)。