@lexchz

Почему RIGHT JOIN ведет себя как INNER JOIN при объединении с третьей таблицей?

Есть такой запрос:

SELECT
						p.post_name,
						p.post_title,
						r.average_rate AS average,
						r.total_reviews AS total
					  FROM
						wp_company_rates r
						RIGHT JOIN wp_posts p ON r.post_id = p.ID
					  WHERE
						p.post_type = 'company'
						AND p.post_status = 'publish'
					  ORDER BY
						average DESC,
						total DESC


Здесь всё работает, как и ожидается, - выводятся все строки из wp_posts, а недостающие с строки с wp_company_rates заполняются NULL.

Однако если добавить JOIN с третьей таблицей:

SELECT
						p.post_name,
						p.post_title,
						r.average_rate AS average,
						r.total_reviews AS total
					  FROM
						wp_company_rates r
						RIGHT JOIN wp_posts p ON r.post_id = p.ID
						JOIN wp_term_relationships t ON r.post_id  = t.object_id
					  WHERE
						p.post_type = 'company'
						AND p.post_status = 'publish'
					  ORDER BY
						average DESC,
						total DESC

то RIGHT JOIN со второй таблицей почему-то начинает работать как INNER JOIN, то есть в выборку попадают только те строки, которые есть в первой таблице, что выглядит не логично, и не понятно, какой влияние оказывает третья таблица на вторую. Поясните пожалуйста, почему так происходит, в сети ничего внятного именно для такого случая не нашел.
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
не понятно, какой влияние оказывает третья таблица на вторую
Напрямую никакого. У вас INNER JOIN `wp_company_rates` и `wp_term_relationships`, поэтому естественно, что в финальную выборку попадут только те строки, которые совмещаются по условию JOIN'a. Если после RIGHT JOIN вы получили в объединённой строке `wp_company_rates`.`post_id` равное NULL, то, естественно, в INNER JOIN эта строка не войдёт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы