[英]Search for multiple values in multiple columns in SQL
我的数据库中有下表:
名 | 姓 |
---|---|
卡琳达 | 海姆斯 |
卡罗琳 | 格林伍德 |
亚伦 | 工作 |
米歇尔 | 尤尔卡 |
现在我想创建一个包含多个字符串的查询,该查询应该只返回包含该字符串的记录。 例如,搜索ka
应返回Kalinda 、 Karolyn和Michel 。 这很简单,我正在实现这一点
SELECT * FROM table WHERE firstName LIKE '%ka%' OR lastName LIKE '%ka'
现在,当我的搜索是ka he
时,如何创建查询? 我希望只返回Kalinda和Michel ,因为ka
和he
都出现在他们的名字中。 我遇到的最大问题是值的数量是未知的。
实际上我正在使用 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.