MySql найти данные в одной таблице на основе условий двух других таблиц - PullRequest
0 голосов
/ 29 июля 2011

Помогите мне с этим запросом: У меня есть 3 таблицы с этой структурой.

items_to_groups (item_id | group_id)

item_to_regions (item_id | region_id)

предметов [связка столбцов]

Мне нужно выбрать каждую строку в таблице item , у которой есть соответствие item_id в item_to_groups таблица WHERE group = x AND имеет соответствие item_id для item_to_regions таблицы WHERE region = y

В настоящее время у меня есть ужасный подзапрос с циклами и всем остальным.

Что может быть лучше для этого? Я думал о JOIN и тому подобном, но не могу понять, как это сделать.

Ответы [ 3 ]

1 голос
/ 29 июля 2011
SELECT bunch_of_columns
FROM items i 
INNER JOIN items_to_groups ig ON i.id=ig.item_id
INNER JOIN items_to_regions ir on i.id=ir.item_d
WHERE ir.region_id=y
AND ig.group_id=x

Ознакомьтесь с документацией JOIN по MySQL.Объединения важны для реляционных баз данных.Как вы уже сказали, вам трудно понять, как соединяться, взгляните на Визуальное объяснение объединений SQL Джеффа Этвуда.Может быть, это поможет.

0 голосов
/ 29 июля 2011
SELECT * FROM items
JOIN items_to_groups ON (items.item_id = items_to_groups.item_id AND group_id = ?)
JOIN items_to_regions ON (items.item_id = items_to_regions.item_id AND region_id = ?)
GROUP BY items.item_id
0 голосов
/ 29 июля 2011
SELECT colums 
FROM items 
INNER JOIN items_to_groups ON items.item_id = items_to_groups.item_id AND group_id = x 
INNER JOIN items_to_regions ON items.item_id = items_to_regions.item_id AND region_id = y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...