проблема с запросом на соединение - PullRequest
0 голосов
/ 04 мая 2011
SELECT *
FROM 
        productinfo as p ,
        category as c
WHERE
        c.id IN (p.category) AND 
        p.pid='T3'

ГДЕ p.category вернет (1,2,3,4,5) из таблицы с информацией о продукте, который является идентификатором категории.

Теперь мне нужно имя категории, используемое для T3 [productId], но я получаю только имя первой категории.

1 Ответ

0 голосов
/ 04 мая 2011

Ваш базовый запрос следующий

SELECT * FROM productinfo as p WHERE p.pid = 'T3';

Теперь вам нужно выбрать категории для каждого продукта.Это отношение много-к-одному, поэтому вам нужно ЛЕВОЕ СОЕДИНЕНИЕ.

SELECT * FROM productinfo as p 
LEFT JOIN category as c ON c.id = p.category
WHERE p.id = 'T3'

Вам необходимо изучить различные типы объединений и способы их использования.Всякий раз, когда я вижу, что кто-то использует 'FROM table1, table2' 90% случаев, это означает, что они не понимают объединения и им вместо этого требуется ЛЕВОЕ СОЕДИНЕНИЕ.

Редактирование на основе вашего комментария

Ваша модель данных имеет недостатки.Поскольку продукт может содержать несколько категорий, это действительно отношение «многие ко многим».Вам следует создать таблицу product_category, которая связывает идентификаторы продуктов с идентификаторами категорий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...