Я унаследовал базу устаревшего кода и базу данных с ней (которую я не могу изменить), и я застрял на этих запросах при рефакторинге кода. Есть 4 отдельных запроса, которые я пытаюсь добавить, если это возможно. При необходимости я поставлю схему таблиц. Кроме того, если вы считаете, что это невозможно решить в одном запросе, пожалуйста, уточните это.Объедините четыре запроса в один
Эти запросы (речь идет о спорте), конечная цель состоит в том, чтобы получить все чашки, которые данный пользователь создал и/или присоединившихся
- чашки таблица содержит созданные чашки, их создателя и т.д.
- присоединились таблица содержит пользователь, которые присоединились к конкретной чашке, место (ранг), они закончились
- registered_cups таблицы содержат имена чашек
Первый из них сделает г, чтобы получить все чашки, которые пользователь создал
SELECT cup_id FROM cups WHERE user_id = 'givenUser' AND cup_type <> 6
Второй пытается получить все чашки, которые пользователь присоединился
SELECT joined.cup_id, joined.cup_rank FROM joined LEFT JOIN cups USING (cup_id) WHERE joined.user_id = 'givenUser' AND cups.cup_type <> 6
Теперь результаты первого помещаются в строка, разделенная запятыми, которая затем передается в следующие запросы. Третий один читает информацию для выбранных чашек
SELECT cup_id, user_id, status FROM joined WHERE cup_id IN (cupList)
И последний получают имена чашечек, их издания, и приказывает им
SELECT name, cup_id, edition, cups.user_id FROM cups LEFT JOIN registered_cups USING(register_id) WHERE cup_id IN (cupList) ORDER BY name ASC, edition DESC
Как вы можете видеть, что есть много повторение, и не нужны вещи, так это то, что я придумал:
SELECT cups.cup_id, cups.edition, cups.user_id, joined.cup_rank, registered_cups.name
FROM cups, joined, registered_cups
WHERE cups.cup_id = joined.cup_id
AND cups.register_id = registered_cups.register_id
AND joined.user_id = '308288'
AND cups.cup_type <>6
ORDER BY registered_cups.name ASC , cups.edition DESC
проблема с моим запросом является то, что я получаю только чашки, которые присоединились к пользователю, но есть также возможность того, что использование r создал чашку, но не участвовал в ней. Вот почему первые два запроса, но я не знаю, как их успешно совместить. Надеюсь, вы понимаете, чего я пытаюсь достичь.
Update:
Вот fiddle схемы, с небольшим входом. В этом случае пользователь user_id = 133, он должен в основном выбирать все строки, равные 21, с тем, что один из них должен быть чашкой, которая организована, но не присоединена пользователем, а все остальные - оба ,
Вместо неявным присоединяется и фильтр, где вы должны использовать 'ЛЕВЫЙ JOIN' – Dan