我有包含列的用户表,city_id在此列中城市 ID 存储为逗号分隔值,如下所示:
用户
user_id user_name city_id
1 ahmar_arshad 1,2,3
2 abdul_muiz 15,2,9
3 abdul_momin 1,2,13
Run Code Online (Sandbox Code Playgroud)
现在我想id = 1从city_id列中搜索包含城市的行。
怎么做?
这是一个通用的解决方案,它应该适用于 Postgres:
SELECT *
FROM yourTable
WHERE ',' || city_id || ',' LIKE '%,1,%';
Run Code Online (Sandbox Code Playgroud)
这里的技巧是比较表格中城市 ID 的 CSV 列表,例如,,1,2,3,针对,ID,,其中ID可以是任何单个城市 ID。
请注意,最好将您的表格标准化并将这些城市 ID 存储在单独的记录中,而不是存储在 CSV 字符串中。这将使查询数据更容易,并且可能还会提高性能。
小智 5
如果将该逗号分隔列表转换为数组,则可以使用 Postgres 强大的数组运算符:
select *
from cities
where '1' = any (string_to_array(city_id, ','));
Run Code Online (Sandbox Code Playgroud)
如果您需要查找具有多个 ID 之一的行
select *
from cities
where string_to_array(city_id, ',') && array['1', '2']
Run Code Online (Sandbox Code Playgroud)
这&&是数组的“重叠”运算符。如果您需要查找包含所有 ID 列表的行:您可以使用 contains 运算符:
select *
from cities
where string_to_array(city_id, ',') @> array['1', '2']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1623 次 |
| 最近记录: |