На самом деле в нем только одно ПОЛНОЕ СОЕДИНЕНИЕ, поскольку вы вообще не используете таблицу news
.
SELECT *
FROM news_photos
FULL JOIN news_videos
ON news_photos.news_id=news_videos.news_id
WHERE news_photos.news_id=... OR news_videos.news_id=...
FULL JOIN не поддерживается MySQL. Это может быть менее эффективно смоделировано с использованием двух LEFT JOIN и UNION, но это действительно редко требуется. Предполагая, что каждое фото и видео относится к новостям, вы можете избежать их и получить более обычный запрос, добавив в него таблицу news
:
SELECT *
FROM news
LEFT JOIN news_photos ON news_photos.news_id=news.id
LEFT JOIN news_videos ON news_videos.news_id=news.id
WHERE news_id=...
Но, тем не менее, это почти наверняка не то, что вы имеете в виду! Если для новости есть несколько фотографий и видео, вы бы эффективно создали декартово произведение, в котором каждая комбинация фото и видео создает ряд. Такого рода комбинаторный взрыв вам почти не нужен!
Если вам нужно только одно из каждого фото и видео, я полагаю, вы могли бы взломать это в одном запросе, используя LEFT JOIN, который всегда будет давать NULL с другой стороны:
SELECT * FROM news_photos
LEFT JOIN news_videos ON 0
WHERE news_photos.news_id=...
UNION SELECT * FROM news_photos
RIGHT JOIN news_videos ON 0
WHERE news_videos.news_id=...
Но на самом деле это ничего не даст. Не объединяйте два отдельных запроса («Я хочу, чтобы фотографии для новостей и видео для новостей») в один. Просто сделайте это тривиальным способом:
SELECT * FROM news_photos
WHERE news_id=...
SELECT * FROM news_videos
WHERE news_id=...