我的用户表包含列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
现在,我想从id = 1
列搜索包含城市city_id
的行。
怎么做?
答案 0 :(得分:3)
这是一个通用的解决方案,应该适用于Postgres:
SELECT *
FROM yourTable
WHERE ',' || city_id || ',' LIKE '%,1,%';
这里的技巧是比较表格中的城市ID的CSV列表,例如,1,2,3,
针对,ID,
,其中ID
可以是任何单个城市ID。
请注意,最好对表格进行规范化,并将这些城市ID存储在不同的记录中,而不是CSV字符串中。这样可以更轻松地查询数据,并可能提高性能。
答案 1 :(得分:3)
检查这个。
您应该使用string_to_array
溢出列,然后在where子句中使用city_id ='1'conditon。
select * from (
select id,user_name,unnest(string_to_array(city_id, ',')) city_id
from RT
)a where city_id='1'
在这里查看Demo。
输出
答案 2 :(得分:1)
尝试此查询!
SELECT *
FROM [Table Name]
WHERE city_id LIKE '1,%,%'
OR city_id LIKE '%,1,%'
OR city_id LIKE '%,%,1';
答案 3 :(得分:0)
如果将逗号分隔列表转换为数组,则可以使用Postgres强大的数组运算符:
select *
from cities
where '1' = any (string_to_array(city_id, ','));
如果您需要查找包含多个ID的行
select *
from cities
where string_to_array(city_id, ',') && array['1', '2']
&&
是数组的“重叠”运算符。如果需要查找包含所有ID列表的行:可以使用contains运算符:
select *
from cities
where string_to_array(city_id, ',') @> array['1', '2']
答案 4 :(得分:0)
试试这个......
- ********************************************* ***************
- 为参考创建表结构
create table #test(user_id int,user_name varchar(100),city_id varchar(25))
插入#test值(1,'ahmar_arshad','1,2,3') 插入#test值(1,'abdul_muiz','15,2,9') 插入#test值(1,'abdul_momin','1,2,13')
- 从#test
中选择*- ********************************************* ***************
- 查询
从中选择user_id,user_name,city_id ( 选择user_id,user_name,city_id,将(city_id,',','')替换为City_ID2 来自#test )一个 其中City_ID2喜欢'%1 %'
- 将逗号替换为星号(*),然后搜索。
- ********************************************* ***************
答案 5 :(得分:-2)
SELECT *
FROM user
WHERE user_id LIKE '%1%';
您可以在w3school上搜索关键字