Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Как написать sql между двумя полями типа set?


Автор: taral 22.10.2014, 11:28
Допустим у меня есть таблица
id value (type set)
1 a,b
2 r,d,g,h,a
3 g,s,e,a
4 k,l,p,o
И есть набор значений ['a','b','s','u','t']
Мне необходимо с таблицы выбрать те записи где есть хотя бы одно совпадение элемента с моего списка и с списка таблицы.
К примеру в строке 1 элемент 'a' присутствует и в моем списке.
И дополнительная задача. Нужно что бы в моем списке присутствовали все значения с списка строки таблицы. По этому примеру проходит только первая строка где элементы 'a' и 'b' есть в моем списке.
Спасибо за внимание. У меня пока нет идей как это лучше реализовать.

Автор: Romikgy 22.10.2014, 12:12
Код

SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;

Автор: taral 22.10.2014, 13:10
Цитата

SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;

Такой способ запроса я знаю. В моем случае он не подойдет. Поскольку у меня 'value' не одно значение, а набор. Причем условие пройдет если любое из значений с таблицы будет в списке. Я выше все подробно описал. Спасибо за ответ.

Автор: Akina 22.10.2014, 15:24
Если набор значений также поступает в виде списка - одним запросом это не решается.
Самый простой выход - слить искомые значения во временную таблицу, но по одному.
Самый правильный выход - нормализовать структуру БД и уйти от хранения CSV-set.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)