2009-10-29 6 views
1

У меня есть две таблицы: «Категория» и «Продукт». В категории I есть catid и cat name. В таблице продуктов у меня есть item-id, item-name, catid.SQL complex query

Что мне нужно сделать, это показать результат, который будет иметь item name и category name. Но название категории будет кратным. Так что один продукт может иметь несколько категорий.

ответ

2

Если ваша схема имеет идентификатор категории в таблице продуктов, то нет, один продукт не может иметь несколько категорий. Если у вас есть другая таблица M: N, чтобы связать продукты с категориями, вы должны обновить свой вопрос.

+0

категория идентификатор таблицы продуктов, как 2,3,4 так 1 продукт может имеют несколько категорий – Santanu

+3

Хорошо, тогда вы должны прочитать http://en.wikipedia.org/wiki/Database_normalization - делать это с таким составным столбцом будет сложно и медленно. –

+0

Можете ли вы повлиять на модель данных, или это данные? Потому что это очень субоптимальный подход для большинства сценариев использования. – tijmenvdk

4

Вы можете создать три таблицы, из-за присоединение таблицы, позволят каждую строку, чтобы иметь несколько линий, соответствующих в другой таблице:

Category  : catid catname 
Product   : itemid itemname 
CategoryProduct : catid itemid 

Так продукт может иметь 0, 1 или больше категорий ,

Пример контента для присоединения таблицы, для двух продуктов, имеющих одни и те же две категории:

catid itemid  in CategoryProduct 
    1  3 
    1  4 
    2  3 
    2  4 
2

В ответ на ваш комментарий:

Категория Идентификатор таблицы продукта является как 2 , 3,4, так что 1 продукт может иметь несколько категорий

Если вам разрешено изменять структуру стола , непременно следуйте советам KLE. Это разумный и удобный подход.

Если вы не можете изменить структуру таблицы, вы можете запросить категории с хака, как это:

select * 
from product p 
inner join category c 
    on ',' + p.catid + ',' 
     like '%,' + cast(c.catid as varchar) + ',%' 
+1

Зависит от базы данных, но, например, в MySQL вы можете делать 'ON find_in_set (c.catid, p.catid)'. –