MySQL - левые соединения официально предпочтительны по сравнению с правильными присоединениями?

17

В документации по MySQL для объединений сотрудник указал на этот камень мне сегодня:

  

RIGHT JOIN работает аналогично LEFT JOIN . Чтобы переносить код через базы данных, рекомендуется использовать LEFT JOIN вместо RIGHT JOIN .

Кто-нибудь может пролить свет на это? Это кажется мне вероятным прошлым возрастом - так как, возможно, документация означает сказать: «Чтобы поддерживать обратный код обратно с более ранними версиями MySQL ...»

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

Является ли этот совет еще современным и действенным? Есть ли веские причины, чтобы избежать RIGHT JOIN ?

    
задан MightyE 11.07.2012 в 20:18
источник
  • Я стараюсь избегать правильного присоединения, так как я более привык к мысли с точки зрения левых объединений, но иногда они полезны. Связанный Кто-нибудь использует правильные внешние соединения ?. –  Martin Smith 11.07.2012 в 20:33
  • Я также использую левые соединения, а при построении запроса вы склонны думать в одном направлении, и вы начинаете с ядра своих данных, а затем расширяете его, делая левое соединение более естественным из двух. Но я с удивлением вижу документацию по MySQL, в которой говорится о проблеме переносимости. –  MightyE 11.07.2012 в 20:40
  • Мне довольно забавно, что руководство MySQL заботится о переносимости в том случае, когда они игнорируют его во многих других местах. –  a_horse_with_no_name 11.07.2012 в 21:51
  • Используют ли люди, которые используют языки справа налево, чаще всего используют право? –  Mathieu Longtin 12.07.2012 в 04:05
  • Mathieu - это хороший вопрос =) Я не уверен, что они делают, потому что это не LtoR vs RtoL, что делает левые более естественными, но более того, тенденция состоит в том, чтобы начать с записей, которые вы хотите отобразить из, затем присоединяться к тому, что со ссылками, которое является направлением левого объединения. –  MightyE 12.07.2012 в 15:21

3 ответа

27

Существует, по крайней мере, один механизм SQL, который не поддерживает RIGHT JOIN : SQLite . Возможно, именно поэтому совместимость была указана как проблема. Там могут быть и другие SQL-модули.

    
ответ дан Jacob 11.07.2012 в 21:08
источник
  • Полезно знать =). Тем не менее, как замечает a_horse_with_no_name, странно, что MySQL будет говорить о переносимости на что-то вроде объединений, когда они игнорируют его во многих других областях. Я подозреваю, что рекомендация может быть скорее основана на совместимости с более ранними версиями MySQL. –  MightyE 12.07.2012 в 15:23
1

Итак, RIGHT и LEFT JOIN выполняют одно и то же действие в типичных SQL-машинах. Таблица LEFT JOIN a to table b возвращает все из a , которая существует в b или нет. Таблица RIGHT JOIN a в таблицу b возвращает все из b , которая существует в a или нет. Перед оптимизацией запроса ключевые слова LEFT и RIGHT относятся только к действию, которое необходимо предпринять в какой таблице. Оптимизатор MySQL всегда будет нормализовать запрос и сделать JOIN эффективно LEFT JOIN. Таким образом, запись вашего запроса на использование LEFT JOIN вместо RIGHT будет стоить меньше в оптимизаторе.

    
ответ дан EMM 12.07.2012 в 23:50
источник
-1

Это разумное соглашение, поэтому оно должно быть предпочтительным, если вы не хотите выразить что-то своеобразное или необычное для любого, кто мог бы его прочитать позже (важно, включая себя).

Ваш вопрос верен, хотя для ответа на его завершение потребуется либо:

1) встречный пример, где RIGHT JOIN не работает или работает со значительными различиями

-или -

2) доказательство того, что такой случай: 1 существует

Я думаю, это будет трудно. Ваше предположение о том, что совет, возможно, было устаревшим, поскольку оно написано, возможно. Это также может быть связано с некоторой морщиной MySQL, поддерживающей несколько базовых баз данных. Возможно, один из них ПРАВИЛЬНЫЙ ПРИСОЕДИНЯТЬ нетерпимость?

    
ответ дан khaije1 11.07.2012 в 21:03
источник