Предложение ON в SQL присоединиться - имеет ли значение заказ? - PullRequest
0 голосов
/ 28 апреля 2020

Это два одинаковых?

 - SELECT p.name,o.order_time FROM ORDERS o INNER JOIN PRODUCTS p on **o.product_id=p.id**;
 - SELECT p.name,o.order_time FROM ORDERS o INNER JOIN PRODUCTS p on **p.id=o.product_id**;

И эти два - одно и то же:

 - SELECT p.name,o.order_time FROM ORDERS o LEFT JOIN PRODUCTS p on **o.product_id=p.id;**
 - SELECT p.name,o.order_time FROM ORDERS o LEFT JOIN PRODUCTS p on **p.id=o.product_id;**

1 Ответ

0 голосов
/ 28 апреля 2020

Да, первые 2 запроса абсолютно одинаковы с точки зрения производительности и результата. Кроме того, первые 2 запроса аналогичны приведенным ниже запросам:

SELECT p.name, o.order_time ИЗ ПРОДУКТОВ p ВНУТРЕННИЕ ЗАКАЗЫ СОЕДИНЕНИЯ o в p.id = o.product_id ;

Что, в свою очередь, совпадает с:

ВЫБРАТЬ p.name, o.order_time ИЗ ПРОДУКТОВ p ВНУТРЕННИЕ ЗАПИСИ СОЕДИНЕНИЯ o на o.product_id = p.id ;

Примечание: также поменялся порядок внутренних таблиц соединения.

3-й и 4-й также одинаковы в сроки исполнения и результат. Здесь нельзя поменять местами порядок таблиц, если только набор данных не гарантирует тот же результат.

Исходя из набора данных, первые 2 запроса могут дать тот же или иной результат, чем последние 2 запроса.

Причина: = является коммутативным, то есть a=b совпадает с b=a. Расширяя его, просто INNER JOIN также является коммутативным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...