繁体   English   中英

在 SQL 中的多个列中搜索多个值

[英]Search for multiple values in multiple columns in SQL

我的数据库中有下表:

卡琳达 海姆斯
卡罗琳 格林伍德
亚伦 工作
米歇尔 尤尔卡

现在我想创建一个包含多个字符串的查询,该查询应该只返回包含该字符串的记录。 例如,搜索ka应返回KalindaKarolynMichel 这很简单,我正在实现这一点

SELECT * FROM table WHERE firstName LIKE '%ka%' OR lastName LIKE '%ka'

现在,当我的搜索是ka he时,如何创建查询? 我希望只返回KalindaMichel ,因为kahe都出现在他们的名字中。 我遇到的最大问题是值的数量是未知的。

实际上我正在使用 JPA,但欢迎任何帮助。

我尝试了什么

我正在对每个值进行一次查询,连接结果并删除重复项。 但这让我想起了卡琳达卡罗琳米歇尔 卡罗琳不应该在那里,因为她的名字没有he的价值。 多个查询也不是数据库的最佳选择......

一些答案后编辑

在查看了一些帮助我(希望)朝着正确方向前进的答案之后,我正在寻找一种替换| AND运算符的运算符:

SELECT * FROM table WHERE CONCAT(firstName, lastName) SIMILAR TO '%(he|ka)%'

因此,如果我的理解正确,您希望每个人的全名中都有两个字符串。

这行得通吗?

SELECT * FROM table WHERE firstName+' '+lastName LIKE '%ka%' AND firstName+' '+lastName LIKE '%he%'

对于PostgreSQL ,有一个很棒的特性叫做 .

简单地说,您可以使用正则表达式模式搜索不同的键。 例如:

select * from table where firstName similar to '%(ka|he)%'

在您的情况下,您也可以查看lastName因为您想同时搜索两者。

因此,您可以检查以下查询和此 SQLFiddler 链接

select * from mytable where lower(firstName) similar to '%(he|ka)%' OR lower(lastName) similar to '%(he|ka)%'

我终于能够使用正则表达式和 PostgreSQL 的~运算符找到解决方案:

SELECT * FROM table WHERE LOWER(CONCAT(firstName, ' ', lastName)) ~ '^(?=.*he)(?=.*ka).*$'

对于更多值,我只需将(?=.*value)添加到正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM