如何构建这个SQL查询

时间:2010-11-13 09:39:05

标签: sql

表:sometbl

field1|field2|field3
txt1  |txt2  |1,5,7,4
txt3  |txt4  |1,7,8,9
txt5  |txt6  |8,3

如何从some3bl中选择all3,其中field3包含1?

4 个答案:

答案 0 :(得分:2)

这不是normalized表格。

您可以使用LIKE运算符:

SELECT * 
FROM sometbl
WHERE field3 LIKE '%1%'

编辑:

这当然也会匹配1110101等...

如果你知道1只能存在于开头,你可以使用:

SELECT * 
FROM sometbl
WHERE field3 LIKE '1,%' 
OR field3 = '1'

如果1可以出现在任何地方,这将有效:

SELECT * 
FROM sometbl
WHERE field3 LIKE '1,%' 
OR field3 LIKE '%,1' 
OR field3 LIKE '%,1,%' 
OR field3 = '1'

虽然最好的选择是规范化。

答案 1 :(得分:1)

如果以逗号分隔的值是数字而不是数字,则不要仅使用LIKE '%1%',它也将包括“5,21”和“14,65”。如果是这种情况,您可以使用像SELECT * FROM sometbl WHERE field3 LIKE '%,1' OR field3 LIKE '%,1,%' OR field3 LIKE '1,%' OR field3 = '1'这样的hacky。凌乱,但在语义上是正确的。

答案 2 :(得分:0)

如果field3是文字,请使用the LIKE operator

答案 3 :(得分:0)

SELECT * 
FROM sometbl
WHERE field3 LIKE '%,1' OR field3 LIKE '1,%' OR field3 LIKE '%,1,%'