У меня есть 3 таблицы:MYSQL: выбрать из многих ко многим таблице связующей
1) упражнение: exercise_id, имя
2) Оборудование: equipment_id, имя
3) exercise_equipment: exercise_id , equipment_id - это таблица ссылок между упражнениями и оборудованием. В этой таблице для одного упражнения может потребоваться несколько единиц оборудования, и одно и то же оборудование может использоваться для многих упражнений.
CREATE TABLE exercise
(`ex_id` int, `name` varchar(30))
;
INSERT INTO exercise
(`ex_id`, `name`)
VALUES
(1, 'push ups'),
(2, 'sit ups'),
(3, 'squats'),
(4, 'push ups with a fitness ball')
;
CREATE TABLE equipment
(`eq_id` int, `name` varchar(30))
;
INSERT INTO equipment
(`eq_id`, `name`)
VALUES
(1, 'none'),
(2, 'mat'),
(3, 'ball')
;
CREATE TABLE exercise_equipment
(`ex_id` int, `eq_id` int)
;
INSERT INTO exercise_equipment
(`ex_id`, `eq_id`)
VALUES
(1, 2),
(2, 2),
(3, 1),
(4, 2),
(4, 3)
;
Что мне нужно сделать, это выбрать все упражнения, которые пользователь может делать с оборудованием, которое он имеет (например, 1 и 2 - нет оборудования или мат).
Я нашел несколько примеров и попытался следующие запросы с внутренним соединением и где:
SELECT ex.ex_id, ex.name from exercise ex
LEFT JOIN exercise_equipment exeq ON ex.ex_id = exeq.ex_id
WHERE exeq.eq_id IN (1,2);
и
select ex_id, name from exercise
where ex_id in (select ex_id from exercise_equipment where eq_id in (1,2));
Но они возвращаются все упражнения, а не только первые три. В этом случае, если пользователь хочет выполнять упражнения, которые не требуют оборудования или мата (1 и 2), я хочу, чтобы отжимания, сидения и приседания возвращались, но не упражнение с мячом.
Я надеюсь, что мои разъяснения понятны. Я бы очень признателен за любую помощь, которую я могу получить!
Это именно то, что мне нужно! Спасибо! – user5087295