Читайте также:
|
|
Теперь мы знаем, что условия соединения относятся к подблоку on, то_ гда как условия фильтрации располагаются в блоке where. Однако SQL не налагает жестких ограничений на размещение условий, поэтому соз_ давать запросы следует очень внимательно. Например, следующий за_ прос соединяет две таблицы с помощью одного блока соединения и од_ ного условия фильтрации в блоке where:
106 Глава 5. Запрос к нескольким таблицам
mysql> SELECT a.account_id, a.product_cd, c.fed_id
_> FROM account a INNER JOIN customer c _> ON a.cust_id = c.cust_id
_> WHERE c.cust_type_cd = 'B';
+____________+____________+____________+ | account_id | product_cd | fed_id | +____________+____________+____________+
| | | CHK | | 04_1111111 | | ||||
| | | BUS | | 04_1111111 | | | |||
| | | BUS | | 04_2222222 | | | |||
| | | | CHK | | | 04_3333333 | | | |
| | | | SBL | | | 04_4444444 | | |
+____________+____________+____________+ 5 rows in set (0.08 sec)
Достаточно просто, но что произойдет, если по ошибке поместить усло_ вие фильтрации в подблок on, а не в блок where?
mysql> SELECT a.account_id, a.product_cd, c.fed_id
_> FROM account a INNER JOIN customer c _> ON a.cust_id = c.cust_id
_> AND c.cust_type_cd = 'B';
+____________+____________+____________+ | account_id | product_cd | fed_id | +____________+____________+____________+
| | | CHK | | 04_1111111 | | ||||
| | | BUS | | 04_1111111 | | | |||
| | | BUS | | 04_2222222 | | | |||
| | | | CHK | | | 04_3333333 | | | |
| | | | SBL | | | 04_4444444 | | |
+____________+____________+____________+ 5 rows in set (0.00 sec)
Как видите, второй вариант, в котором оба условия находятся в подбло_ ке on и нет блока where, обеспечивает аналогичные результаты. А что ес_ ли оба условия помещены в блок where, но блок from по_прежнему ис_ пользует ANSI_синтаксис соединения?
mysql> SELECT a.account_id, a.product_cd, c.fed_id
_> FROM account a INNER JOIN customer c _> WHERE a.cust_id = c.cust_id
_> AND c.cust_type_cd = 'B';
+____________+____________+____________+ | account_id | product_cd | fed_id | +____________+____________+____________+
| | | CHK | | 04_1111111 | | ||||
| | | BUS | | 04_1111111 | | | |||
| | | BUS | | 04_2222222 | | | |||
| | | | CHK | | | 04_3333333 | | | |
| | | | SBL | | | 04_4444444 | | |
+____________+____________+____________+ 5 rows in set (0.00 sec)
Упражнения | |
Сервер MySQL снова сгенерировал тот же результирующий набор. Рас_ положить условия на соответствующих местах, чтобы запрос был пра_ вильно понят и обработан, – ваша задача.
Дата добавления: 2015-08-17; просмотров: 47 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Gt; FROM employee e1 INNER JOIN employee e2 | | | Упражнения |