![]() |
|
Модераторы: Akella |
![]()
|
|
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Всем привет.
Сервер FireBird 2.1.0.17798. Всегда думал, что right join работает следующим образом: Если даже нет данных в основной выборке, а в таблице Right Join есть то они и вернуться. Тут на днях всё делаю и бац, не работает. Начал разбираться и понял, что то чего я собственно думал не верно. Итак запрос:
В таблице A нет данных у которых Uni = 17, но в таблице B есть данные у которых uni = 17. Итого результатом запроса должно быть: NULL, 17 или я что-то путаю? Конечно можно всегда поменять таблицы местами и использовать Left join A, но хочется разобраться. P.S> Ногами не бейте Добавлено через 55 секунд Эм поправка, результатом будет NULL, 17 если в таблице B есть одна запись у которой UNI=17. |
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 1 Всего: 252 |
А так? |
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Все данные из таблицы B, а вместе A.uni поставил NULL. Тоесть получается в
RIGHT JOIN B ON (Указываются условия по которым нужно связываться с ведомой таблицей, а не те условия которые накладываются на таблицу B) А если хочешь условия на таблицу B указывай их в разделе WHERE. Так получается? Все равно не допонимаю почему в нашем случае A.uni=17 в условии WHERE приводит к пустой выборке? Это сообщение отредактировал(а) pavelv - 11.9.2008, 06:12 |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 22 Всего: 44 |
pavelv, A.uni = 17 - пустая выборка потому что
При объединении A и B по right, выбираются все записи из B и в строчку подставляются данные из А только когда выполняется условие объединения, прописанное в ON (...). Сл-но получается запись типа и где там A.uni = 17? PS: делай либо в условии объединения или Where B.uni = 17. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| pavelv |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 5.2.2006 Репутация: нет Всего: нет |
Всё теперь доехал, тоесть он построил у меня всю модель выборки и потом уже в условии WHERE попробовал найти данные у кт A.uni=17, потому и NULL вернул. Я просто не так понимал порядок выполнения. Клинило, что он сначала всё выполнит(включая Where) ну а уже потом будет делать right join...всем спасибо.
|
|||
|
||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |