用于从包含多个值的列中获取值的 sqlite 查询
sqlite query for getting a value from a column containing multiple values
我有一个简单的 table,如下所示
我需要找到编号为 3
的 'ID',所以我写了如下查询
select * from IDtable where Number like '%3%'
它实际上返回了所有 ID
,因为我使用了 like
并且 Number
包含许多以 3
开头的值,我如何获得 id
其中包含 3
在列的开头和结尾处连接一个 ,
,并使用运算符 LIKE
:
检查它是否包含 ',3,'
SELECT *
FROM IDtable
WHERE ',' || Number || ',' LIKE '%,3,%'
或 INSTR()
:
SELECT *
FROM IDtable
WHERE INSTR(',' || Number || ',', ',3,')
在 Python 中,您应该为参数 "3"
:
使用 ?
占位符
n = "3"
sql = """
SELECT *
FROM IDtable
WHERE ',' || Number || ',' LIKE '%,' || ? || ',%'
"""
cursor.execute(sql, (n,))
请注意,规范化的 table 如:
ID
Number
Ab
2
Ab
9
Ab
16
...
......
cD
3
cD
10
cD
17
...
......
将为您省去使用可能会降低性能的复杂字符串表达式进行查询的所有麻烦。
我有一个简单的 table,如下所示
我需要找到编号为 3
的 'ID',所以我写了如下查询
select * from IDtable where Number like '%3%'
它实际上返回了所有 ID
,因为我使用了 like
并且 Number
包含许多以 3
开头的值,我如何获得 id
其中包含 3
在列的开头和结尾处连接一个 ,
,并使用运算符 LIKE
:
',3,'
SELECT *
FROM IDtable
WHERE ',' || Number || ',' LIKE '%,3,%'
或 INSTR()
:
SELECT *
FROM IDtable
WHERE INSTR(',' || Number || ',', ',3,')
在 Python 中,您应该为参数 "3"
:
?
占位符
n = "3"
sql = """
SELECT *
FROM IDtable
WHERE ',' || Number || ',' LIKE '%,' || ? || ',%'
"""
cursor.execute(sql, (n,))
请注意,规范化的 table 如:
ID Number Ab 2 Ab 9 Ab 16 ... ...... cD 3 cD 10 cD 17 ... ......
将为您省去使用可能会降低性能的复杂字符串表达式进行查询的所有麻烦。