Объединение трех таблиц, помогите с запросом

E
На сайте с 14.09.2007
Offline
24
492

С sql редко имею дело, возможно, задача простая.

Есть таблица объектов table. Организуется сложный каталог объектов, причем один объект может быть помещен в несколько разделов каталога. Для хранения соответствий «раздел каталога – объект» создается таблица categories_table, содержащая записи вида category_id, object_id (отношение «многие ко многим»). Соответственно, чтоб извлечь все объекты из какого-то раздела каталога, применяем объединение таблиц:

SELECT category_id, table.* FROM categories_table LEFT OUTER JOIN table ON categories_table.object_id=table.id WHERE category_id=...

Однако, есть еще один признак, по которому можно классифицировать объекты, создавая аналогичный каталог. В итоге получем вторую таблицу соответствий «раздел каталога 2 – объект» - categories_table_2, содержащую записи вида category_id_2, object_id. Соответственно, чтоб извлечь все объекты из какого-то раздела каталога по второму признаку, применяем объединение таблиц:

SELECT category_id_2, table.* FROM categories_table_2 LEFT OUTER JOIN table ON categories_table_2.object_id=table.id WHERE category_id_2=...

Вопрос: как отобрать объекты сразу по двум признакам (category_id, category_id_2), т.е. те, для которых и в categories_table, и в categories_table_2 существуют соответствующие записи. Понимаю, что нужно объединять три таблицы, но как именно, голова не варит :(

A0
На сайте с 22.09.2007
Offline
70
#1

Ну в запросе-то ничего сложного...

SELECT `categories_table_2`.*,`categories_table`.*,`table`.*

FROM `table`
JOIN `categories_table` ON `categories_table`.`object_id`=`table`.`id`
JOIN `categories_table_2` ON `categories_table_2`.`object_id`=`table`.`id`
WHERE `category_id_2`=? AND/OR `category_id`=?

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

E
На сайте с 14.09.2007
Offline
24
#2
an0nym:
Ну в запросе-то ничего сложного...

+ 1000

Поковырял в теории sql, действительно, ничего сложного - спасибо за помощь!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий