sql - 如何给出与用逗号分隔的括号内给出的任何值匹配的sql的like运算符,并且这些值可以是任何顺序
问题描述
我有一列说国家列当我触发查询值时
|Country|
|US,UK,Canada|
|India,Pak,Bangladesh|
|Israel,Sudan,Africa|
现在,当我使用 where 过滤出国家时,例如
select * from country where Country = 'US,UK,Canada'
那么它给出了非常好的结果,
|US,UK,Canada|
但是假设 Country 列显示的数据如下
|Country|
|Canada,UK,US|
|India,Pak,Bangladesh|
|Israel,Sudan,Africa|
那么上面的查询将不起作用。
我想要一种方法,当用逗号分隔的单元格值按任何顺序排列时,它就像Canada,UK,US or US,Canada,UK etc .
我不知道如何使用 SQL 的 like 运算符来处理这个问题
解决方案
在列中存储 CSV 是设计不佳的一个示例。您应该使用复杂类型(数组)或规范化您的架构。
使用数组比较的解决方法(假设列中的所有元素都是唯一的):
WITH cte AS (
SELECT *, ('{' || country || '}')::text[] AS a_country
FROM Country
)
SELECT *
FROM cte
WHERE a_country <@ ('{' || 'Canada,UK,US' || '}')::text[]
AND a_country @> ('{' || 'Canada,UK,US' || '}')::text[];
推荐阅读
- r - bind_rows_(x, .id) 中的错误:参数 1 必须有名称
- c# - 如何捕获 System.IO.FileSystemWatcher 抛出的异常
- swift - CMSensorRecorder - 读取历史数据有时返回 nil
- javascript - Showing month name from users input using JS switch case
- php - .htaccess 301 路径 URL 重组?
- c# - Active Directory - 用户不是他们所在组的成员
- angular-cli - “ng new app-name”导致“npm ERR!超出最大调用堆栈大小”
- javascript - 映射数组以获取特定值
- python - SyntaxError:URLpattern 中的语法无效
- sql - 如何编写一个触发器来限制 bankcustomer 表中的一个人只能在 account 表中拥有 3 个帐户?