2014-02-19 3 views
0

Следующий запросзапрос на FIND_IN_SET

SELECT ASSOCIATED_RISK 
FROM PROJECT_ISSUES 
WHERE FIND_IN_SET('98',ASSOCIATED_RISK); 

возвращается выход как

96,98 

90,98 

, но если я использую

SELECT ASSOCIATED_RISK 
FROM PROJECT_ISSUES 
WHERE FIND_IN_SET('96,98',ASSOCIATED_RISK); 

не возвращается anything.In данном случае я хотел бы для извлечения первой строки.

96,98 
+0

Прежде всего нормализовать структуру –

ответ

1

Ваш комментарий:

есть ли другой способ, которым я могу получить его в одном запросе вместо кадрирования мультипликатора find_in_set и Concat их

В качестве альтернативного решения можно использовать locate на вашем ASSOCIATED_RISK значение.

Пример:

locate(replace('96,98', ',', ''), replace(ASSOCIATED_RISK, ',', '')) 

Edit:
Согласно Aziz Shaikh комментарий, мы можем видеть, что есть возможность истинного результата, хотя строка поиска не существует в целевом строка.

В качестве альтернативного решения вы можете заменить строку поиска из целевой строки пустой строкой и сравнить длины. Если длина исходной строки больше, чем новая, заменяемая строка, то это результат :.

Пример:

-- this should be greater than 0 for a found true 
length(ASSOCIATED_RISK) > length(replace(ASSOCIATED_RISK, '96,98', '')) 
+0

Работает хорошо. Отличная идея. :) – user1650864

+0

@ user1650864 это работает, но не смотрите, если 'ASSOCIATED_RISK' содержит значение, подобное этому' '9698,97'', вышеуказанный запрос также вернет' '9698,97' 'потому что он заменяет', 'и ищет как строку. –

+0

@ АзизШайх: Вы правы. Альтернативное решение заменяет строку поиска пустым в целевой строке и сравнивает длины с '>' for * found true *. –

0

Это даст результат. увидеть разницу.

SELECT ASSOCIATED_RISK FROM PROJECT_ISSUES WHERE FIND_IN_SET(ASSOCIATED_RISK,'96,98'); 
+0

sorry.This тоже не дали результата. – user1650864

+0

В этом в основном, поскольку я обнаружил, что синтаксис неверен. используйте мой запрос. дает, безусловно, ваш ожидаемый результат :) Спасибо. –

+0

Я не могу думать. дает вашу схему, я дам ваш результат. используя одну функцию FIND_IN_SET, мы можем получить множественный результат значений, разделенных запятыми. –

2

Используйте предложение AND, как это:

SELECT ASSOCIATED_RISK 
FROM PROJECT_ISSUES 
WHERE FIND_IN_SET('96',ASSOCIATED_RISK) 
AND FIND_IN_SET('98',ASSOCIATED_RISK) 

Ваш запрос не удается, потому что FIND_IN_SET() не работает должным образом, если первый аргумент содержит запятую («») характер. Ссылка: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set. В вашем случае первый аргумент - '96,98', поэтому он терпит неудачу.

+0

Это дает правильный результат. Как бы там ни было, я могу получить его в одном запросе, а не кадрировать несколько find_in_set и конкатрировать их? – user1650864

+0

@ user1650864 извините, я не думаю, что это возможно, если вы не можете изменить структуру таблицы. В идеале значения, разделенные запятыми, не должны храниться в столбце базы данных –

+0

Хорошо. Спасибо за помощь. – user1650864

Смежные вопросы