RIGHT JOIN
- правое внешнее соединение. Работает как JOIN
, но если для строки таблицы, находящейся по правую сторону ключевого слова RIGHT JOIN
, не нашлось ни одной строки в таблице, находящейся по левую сторону RIGHT JOIN
, то строка все равно добавляется в результат, а значения столбцов левой таблицы равны null
.
Запрос с LEFT JOIN
SELECT pp.product_id,
pp.store_id,
pp.price,
ppl.store_id AS store_id_less,
ppl.price AS price_less
FROM product_price pp
LEFT JOIN
product_price ppl
ON ppl.product_id = pp.product_id
AND ppl.store_id != pp.store_id
AND ppl.price < pp.price - 1500
ORDER BY pp.product_id,
pp.store_id,
ppl.store_id,
ppl.price
можно легко переписать на RIGHT JOIN
, просто поменяв таблицы местами:
SELECT pp.product_id,
pp.store_id,
pp.price,
ppl.store_id AS store_id_less,
ppl.price AS price_less
FROM product_price ppl
RIGHT JOIN
product_price pp
ON ppl.product_id = pp.product_id
AND ppl.store_id != pp.store_id
AND ppl.price < pp.price - 1500
ORDER BY pp.product_id,
pp.store_id,
ppl.store_id,
ppl.price
product_id | store_id | price | store_id_less | price_less |
---|---|---|---|---|
1 | 300 | 10500.00 | ||
1 | 301 | 12500.00 | 300 | 10500.00 |
1 | 800 | 12000.00 | ||
2 | 500 | 26100.00 | ||
... | ... | ... | ... | ... |
P.S. Мы на практике RIGHT JOIN
почти не используем, LEFT JOIN
воспринимается в запросах гораздо проще (если в предложении FROM
сначала идет основная таблица, от которой строится логика получения остальных данных).