У меня есть таблица, где в таблице называется test, у которой есть 4 поля field.one, названных как список, у меня есть 1,2,3,4,5,6 несколько значений, разделенных запятой, мне нужно проверить, в этой таблице и в этом конкретном поле идентификатор id 4 есть или нет .. с помощью SQL-запроса.sql query complex
ответ
Если вам нужно найти 4 и только 4 (т.е. не 14 или 24, или 40 и т.д.), вы должны использовать
SELECT * FROM foo WHERE col LIKE '%, 4,%'
или
SELECT * FROM foo WHERE col LIKE '%,4,%'
если нет пространства между запятые и цифры
, которые не будут работать для «4,5,6» или просто «4» – Thilo
это true, но лично в этой ситуации я бы написал код, который отправляет строку в базу данных, чтобы включить запятую в начале и в конце - или пробел в начале и запятой в конце и удалить первую запятую из запроса - так что запрос всегда будет работать. – AndrewDFrazier
Дизайн базы данных неправильный, поэтому у вас возникают проблемы с запросом данных. У вас должны быть значения в отдельной таблице, чтобы научить ценность в собственном поле. Тогда было бы легко найти записи:
select t.testId
from test t
inner join listing l on l.testId = t.testId
where l.id = 4
Теперь вы должны использовать некоторые уродливые сравнения строк, чтобы найти записи:
select testId
from test
where ','+listing+',' like '%,4,%'
Общий подход должен проанализировать список в табличную переменную или табличной функции, затем либо присоединяться к таблице, либо использовать подзапрос EXISTS.
Есть много примеров о том, как это сделать:
http://www.bing.com/search?setmkt=en-US&q=SQL+parse+list+into+table
Предполагается, что SQL Server не уверен в других СУБД. – Brannon
Вы можете попробовать
SELECT *
FROM YourTable
WHERE REPLACE(Col, ' ', '') LIKE '4,%' --Starts with
OR REPLACE(Col, ' ', '') LIKE '%,4' --Ends with
OR REPLACE(Col, ' ', '') LIKE '%,4,%' --Contains
OR REPLACE(Col, ' ', '') = '4' --Equals
Подобно тому, как для интереса, посмотрите на эту
DECLARE @delimiter NVARCHAR(5),
@Val INT
SELECT @Val = 40
SELECT @delimiter = ','
DECLARE @YourTable TABLE(
ID INT,
Vals VARCHAR(50)
)
INSERT INTO @YourTable (ID,Vals) SELECT 1, '1,2,3,4,5,6,7,8'
DECLARE @TempTable TABLE(
ID INT,
Vals XML
)
INSERT INTO @TempTable
SELECT ID,
CAST('<d>' + REPLACE(Vals, @delimiter, '</d><d>') + '</d>' AS XML)
FROM @YourTable
SELECT *
FROM @TempTable tt
WHERE EXISTS(
SELECT T.split.value('.', 'nvarchar(max)') AS data
FROM tt.Vals.nodes('/d') T(split)
WHERE T.split.value('.', 'nvarchar(max)') = @Val
)
, а затем вы должны учитывать пробелы между запятыми, .... +1 хотя. –
Вам не нужно учитывать пробелы между запятыми, если фиксированный точный формат. – Thilo
@Thilo: вы находитесь прямо напротив, но я не буду рассчитывать на это. –
Вы можете использовать функцию instring в предложении where и в предложении select :
Oracle:
select substr(column, instr(column, '1', 1), 1)
where instr(column, '1', 1) > 0
работает, если вы хотите одно значение. В качестве альтернативы вы можете использовать комбинацию операторов случая или декодирований, чтобы создать один столбец для каждого возможного значения:
select
decode(instr(column, '1', 1), 0, substr(column, instr(column, '1', 1), 1), null) c1,
decode(instr(column, '2', 1), 0, substr(column, instr(column, '2', 1), 1), null) c2,
decode(instr(column, '3', 1), 0, substr(column, instr(column, '3', 1), 1), null) c3
красоты этого подхода для такого мало нормированного набора данных вы можете сохранить это как вид и затем запустите SQL, поэтому, если вы сохраните вышеуказанное, вы можете использовать:
select c1, c2 from view where c1 is not null or c2 is not null
NB. В других dbms вам, возможно, придется использовать другой синтаксис, возможно, дело скорее декодирует оператор
- 1. SQL Query (complex)
- 2. SQL complex query
- 3. SQL Server paginate complex query
- 4. Help with Complex SQL Query
- 5. django complex query filter
- 6. web2py DAL complex query
- 7. nHibernate complex Query
- 8. Hibernate Query - Complex
- 9. Mysql Complex Query Fail
- 10. Cakephp complex hasMany query query
- 11. Complex-ish MySQL Query
- 12. SQLite Complex Query Help
- 13. sql query complex ordering by issue
- 14. SQL complex join query с суммой
- 15. SQL Complex Query w/Inner Join
- 16. SQL Select - Date Comparing In Complex Query
- 17. SQL Server 2008 Complex Query & Table Join
- 18. NHibernate QueryOver complex query
- 19. PHP/MongoDB & Complex Query
- 20. Mysql select complex query
- 21. EF Complex Query Join
- 22. Laravel Complex Query
- 23. Symfony2 doctrine complex query
- 24. django models complex query
- 25. complex arel query
- 26. Complex Beautiful Soup query
- 27. Nodejs mongoose complex query
- 28. как решить mysql Complex QUERY?
- 29. Complex Group By LinQ Query
- 30. Facebook Graph Search Complex Query
Какой вкус SQL это? –
Django имеет тип поля CommaSeparatedIntegerField, который, как я думаю, хранится в базе данных в виде текста. Мне трудно найти, как работает взаимодействие с базой данных для этого материала. –