Ответ 1
Там, по крайней мере, один механизм SQL, который не поддерживает RIGHT JOIN
: SQLite. Возможно, причина, по которой совместимость была указана как проблема. Там могут быть и другие SQL-модули.
В документации MySQL для объединений сотрудник сегодня указал на этот драгоценный камень:
RIGHT JOIN
работает аналогичноLEFT JOIN
. Чтобы переносить код переносимым по базам данных, рекомендуется использоватьLEFT JOIN
вместоRIGHT JOIN
.
Кто-нибудь может пролить свет на это? Это кажется мне вероятным прошлым возрастом - так как, возможно, документация означает сказать: "Чтобы поддерживать обратный код обратно с более ранними версиями MySQL..."
Есть ли современная РСУБД, которая не поддерживает RIGHT JOIN
? Я получаю, что RIGHT JOIN
является синтаксическим сахаром над LEFT JOIN
, а любой RIGHT JOIN
может быть выражен как LEFT JOIN
, но времена, когда читаемость страдает, если вы пишете запрос в этом направлении.
Является ли этот совет еще современным и действенным? Есть ли веские причины, чтобы избежать RIGHT JOIN
?
Там, по крайней мере, один механизм SQL, который не поддерживает RIGHT JOIN
: SQLite. Возможно, причина, по которой совместимость была указана как проблема. Там могут быть и другие SQL-модули.
Итак, RIGHT и LEFT JOIN выполняют одно и то же действие в типичных SQL-машинах. Таблица LEFT JOIN a
в таблицу b
возвращает все из a
, которая существует в b
, или нет. Таблица RIGHT JOIN a
в таблицу b
возвращает все из b
, которая существует в a
или нет. Перед оптимизацией запроса ключевые слова LEFT и RIGHT относятся только к действию, которое необходимо предпринять в какой таблице. Оптимизатор MySQL всегда будет нормализовать запрос и сделать JOIN эффективно LEFT JOIN. Таким образом, запись вашего запроса на использование LEFT JOIN вместо RIGHT будет стоить меньше в оптимизаторе.
Это разумное соглашение, поэтому оно должно быть предпочтительным, если вы не хотите выразить что-то отличное или необычное для любого, кто мог бы его прочитать позже (важно, включая себя).
Ваш вопрос верен, хотя для ответа на его завершение потребуется либо:
1) встречный пример, где RIGHT JOIN не работает или работает со значительными различиями
-или -
2) доказательство того, что такой случай: 1 существует
Я думаю, это будет трудно. Ваше предложение о том, что совет, возможно, устарел, поскольку это письмо возможно. Это также может быть связано с некоторой морщиной MySQL, поддерживающей несколько базовых баз данных. Возможно, один из них ПРАВИЛЬНЫЙ ПРИСОЕДИНЯТЬ нетерпимость?