Понимание, где предложение против присоединения - PullRequest
0 голосов
/ 17 января 2019

Может кто-нибудь объяснить разницу между приведенными ниже примерами запросов.

select column1,column2 
from table1 
join table2 
  on table1.columna = table2.columna 
  and columna='1234'

против

select column1,column2 
from table1 
join table2 
  on table1.columna = table2.columna 
where columna='1234'

1 Ответ

0 голосов
/ 18 января 2019

Для ответа на вопрос в вашем комментарии, со следующими таблицами:

таблица1 и таблица2

+---------+---------+    +---------+---------+ 
| column1 | columna |    | column2 | columna |
+---------+---------+    +---------+---------+
|      10 |    1234 |    |     100 |    1234 |
|      20 |    1234 |    |     200 |    5678 |
|      30 |    5678 |    +---------+---------+
|      40 |    9876 |
+---------+---------+

Внутренние запросы на соединение приведут к:

+---------+---------+
| column1 | column2 |
+---------+---------+
|      10 |     100 |
|      20 |     100 |
+---------+---------+

Запрос внешнего соединения, включающий фильтр в предложении on, выдаст:

+---------+---------+
| column1 | column2 |
+---------+---------+
|      10 |     100 |
|      20 |     100 |
|      30 |         |
|      40 |         |
+---------+---------+

тогда как запрос внешнего соединения с фильтром после объединения выдаст:

+---------+---------+
| column1 | column2 |
+---------+---------+
|      10 |     100 |
|      20 |     100 |
+---------+---------+

Обратите внимание, что, поскольку columna есть в обеих таблицах, вы должны указать, с каким columna связан фильтр. Я предположил, что таблица 1.

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