簡體   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