Этот вопрос связан с:


Мне было интересно, на практике кто-нибудь писал или встречал использование полезного RIGHT JOIN? Если да, то каков был сценарий? На самом деле у меня нет себя (кроме примеров «посмотрите на это ПРАВИЛЬНОЕ соединение»), поэтому мне было интересно, действительно ли это используется на практике, и если да, то каков был контекст?

sql
2
David542 1 Сен 2020 в 02:10

2 ответа

Лучший ответ

Рассмотрим ситуацию, когда мне нужно боковое соединение, чтобы получить ключ join для столбца (скажем, потому что значения хранятся в массиве). Затем я хочу выполнить внешнее соединение с фиксированным списком кодов, скажем, для их подсчета. Я мог бы написать это так:

select c.code, count(u.code)
from codes c left join
     (t cross join lateral
      unnest(codes) u(code)
     )
     on c.code = u.code;

Или используя right join:

select c.code, count(u.code)
from t cross join lateral
     unnest(codes) u(code) right join
     codes c
     on c.code = u.code;

Я по-прежнему предпочитаю версию left join, но некоторые могут разумно отказаться от скобок в предложении from.

Если у вас только две таблицы в предложении from, left join и right join взаимозаменяемы; это не всегда верно при наличии более двух таблиц. Я не уверен, повлияет ли направление чтения алфавита на то, какое внешнее соединение кто-то предпочитает. Я бы предположил, что основная грамматика родного языка пользователя может иметь эффект, возможно, языки, в которых объект предшествует субъекту; однако такие языки довольно редки и не входят в число наиболее распространенных языков.

3
Gordon Linoff 31 Авг 2020 в 23:21

На самом деле нет ничего особенного в практике между LEFT JOIN и RIGHT JOIN, кроме порядка предложений в предложениях . Вернемся к определению SQL, это просто расстановка операторов для упорядочивания команды вашей СУБД.

Если вы используете предложение RIGHT JOIN, данные будут обслуживаться в большей степени в таблице справа (которая упоминается после этого предложения JOIN ) с использованием {{X1} } делает противоположности из RIGHT JOIN

0
RxGianYagami 31 Авг 2020 в 23:47