MySQL — использование FIND_IN_SET для нескольких таблиц без связи

#mysql #select #find-in-set

#mysql #выберите #find-in-set

Вопрос:

Моя структура базы данных выглядит следующим образом: Имя базы данных: Продукты

 id ptype
1  Cups
2  Shirts
3  Cups
4  Mugs
5  Fabric
6  Mat
  

Имя базы данных: Категории

 id category ptype
1  Clothes  Pants, Shirts, Tshirts
2  Other    Mugs, Cups
  

Я хочу получить список различных типов ptype (таблица продуктов), которые еще не перечислены в таблице ptype категорий

Таким образом, результат будет

 ptype
Fabric
Mat
  

Я попытался использовать следующий запрос mysql select, но, похоже, он не работает

 SELECT p.ptype, c.ptype, FIND_IN_SET(p.ptype,c.ptype) FROM products as p, categories as c WHERE FIND_IN_SET(p.ptype,c.ptype) < 1
  

Он возвращает значение FIND_IN_SET как 0 для всех ptypes таблицы products .

Комментарии:

1. Есть ли у вас пробелы после запятых в поле ptype таблицы categories?

2. Спасибо, что указали, да, у меня есть пробелы после запятых, которых там не должно быть. И удаление этого тоже решает проблему. Опубликуйте это в ответах, и я приму это как решение вопроса. Еще раз спасибо

Ответ №1:

Удалите пробелы после запятых в categories.ptype поле, чтобы запрос работал. find_in_set() сравнивает указатель со списком значений, разделенных запятыми, и считает пробел после запятой частью строк, которые он ищет, поэтому совпадение не найдено, если вы ищете строку, которая не содержит пробелов.