2016-01-30 2 views
1

Извините, если это уже было задано, но его сложно найти.Есть ли способ иметь несколько предложений IN в одном запросе?

У меня есть столбец, который состоит из списка слов, как «яблоко, виноград, апельсин, банан, груша»

Если бы я хотел, чтобы найти строку, которая содержала определенное слово, которое я использовал бы запрос, как:

SELECT * FROM tablename WHERE 'apple' IN(list_of_words) 

Однако я хотел бы найти все строки, которые содержат несколько слов. Нечто подобное, что не работает:

SELECT * FROM tablename WHERE 'apple' IN(list_of_words) AND 'orange' IN(list_of_words) 

используя что-то вроде:

WHERE list_of_words LIKE "%grape%" AND list_of_words LIKE "%apple%" 

бы также не будет работать, потому что тогда было бы найти «грейпфрут» и «Крабапл»

Есть любой простой способ сделать это уже встроен в SQL?

Спасибо.

+1

_I есть столбец, который состоит из списка IDs_ и это является реальной проблемой. Ваша база данных неправильно [нормирована] (https://en.wikipedia.org/wiki/Database_normalization). Исправьте это, и у вас не будет проблем с запросами запросов. Кроме того, будет много других преимуществ, таких как целостность. – jpw

+1

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

+0

Какие ошибки вы получаете? – Malkus

ответ

3

Вы можете использовать FIND_IN_SET:

SELECT * FROM tbl_name WHERE FIND_IN_SET("orange", list_of_words) OR FIND_IN_SET("apple", list_of_words); 

Примечание:list_of_words должны быть разделены запятой без пробелов после каждой запятой для этого, чтобы работать

+0

Спасибо, я думал, что безуспешно пытался FIND_IN_SET ... Должно быть, сделал что-то не так. – WheatBeak

+0

И это увековечивает ужасный дизайн и бесполезно. Предполагается, что должны использоваться индексы в РСУБД, а не принудительные таблицы. – Drew

+0

Это полезно, потому что оно отвечает на фактический вопрос, который никоим образом не имел запроса на критику дизайна. – WheatBeak

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