Таблица: sometblКак построить этот запрос будет
field1|field2|field3
txt1 |txt2 |1,5,7,4
txt3 |txt4 |1,7,8,9
txt5 |txt6 |8,3
Как выбрать все из sometbl где field3 содержит 1?
Таблица: sometblКак построить этот запрос будет
field1|field2|field3
txt1 |txt2 |1,5,7,4
txt3 |txt4 |1,7,8,9
txt5 |txt6 |8,3
Как выбрать все из sometbl где field3 содержит 1?
Это не таблица normalized.
Вы можете использовать LIKE
оператор:
SELECT *
FROM sometbl
WHERE field3 LIKE '%1%'
Edit:
Это, конечно, будет также соответствовать 11
, 10
, 101
и т.д ...
Если вы знаете 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'
Хотя лучший вариант заключается в нормализации.
Если field3
- текст, используйте the LIKE
operator.
SELECT *
FROM sometbl
WHERE field3 LIKE '%,1' OR field3 LIKE '1,%' OR field3 LIKE '%,1,%'
Нет , не будет работать. – Constantin
^^ oops, updated .. – Dienekes
Если разделенные запятыми значения числа, а не цифры, не используйте только LIKE '%1%'
, он будет включать в себя «5,21» и «14,65», а также. Если это так, вы можете использовать что-то взломанное как SELECT * FROM sometbl WHERE field3 LIKE '%,1' OR field3 LIKE '%,1,%' OR field3 LIKE '1,%' OR field3 = '1'
. Беспощадно, но семантически правильно.
Но в любом случае вам лучше потратить некоторое время на нормализацию своей базы данных, это сэкономит вам много времени и сил в будущем – Dyppl
LIKE '% 1%' будет соответствовать 10 –
Но что выберет и 101, не так ли? – lam3r4370
Затем используйте: 'WHERE field3 LIKE '% 1,%'' - еще лучше: нормализовать таблицу! –