Скажем, у меня есть три таблицы:
Таблица PRODUCT (P) имеет ID, NAME
Таблица CATEGORY (C) имеет ID, NAME
Таблица RELATION (R) имеет ID, PRODUCT_ID, CATEGORY_ID
В настоящее время я нахожусь на странице списка продуктов и хочу, чтобы функция могла выполнять поиск продуктов по названию категории.
select P.*
from P
where P.id in (select group_concat(distinct R.product_id) from C join R on C.id=R.category_id where C.name like '%something%')
Вышеупомянутый SQL даст мне только первое совпадение, но выполнение запроса в скобках вернет более одного идентификатора. Как мне это исправить?






group_concat() не нужен:
select P.*
from P
where P.id in (select R.product_id
from C join
R
on C.id = R.category_id
where C.name like '%something%'
);
Ваш запрос в порядке, но чаще он записывается как:
select P.*
from P join
R
on P.id = R.product_id join
C
on C.id = R.category_id
where C.name like '%something%';
Эта версия может возвращать дубликаты, если более чем одна категория соответствует условию like.
большое спасибо! Я пробовал второй sql, но, к сожалению, мне также нужно перечислить все категории, к которым принадлежит каждый продукт. мой полный sql: выберите p. *, group_concat (отличный c.id) как category_ids из p left join r на r.product_id = p.id left join c на c.id = r.category_id, где ### group by p .id ### будет запросом, который я ищу в этом вопросе. Если я помещу ваше второе решение в ###, я не смогу получить все идентификаторы категорий для каждого продукта.
Ты прав! удалите и все работает! В любом случае другой способ написать этот запрос?