| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Firebird, Interbase > Right JOIN |
| Автор: pavelv 11.9.2008, 05:07 | ||
| Всем привет. Сервер 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. |
| Автор: ТоляМБА 11.9.2008, 05:17 | ||
А так? |
| Автор: pavelv 11.9.2008, 06:10 |
| Все данные из таблицы B, а вместе A.uni поставил NULL. Тоесть получается в RIGHT JOIN B ON (Указываются условия по которым нужно связываться с ведомой таблицей, а не те условия которые накладываются на таблицу B) А если хочешь условия на таблицу B указывай их в разделе WHERE. Так получается? Все равно не допонимаю почему в нашем случае A.uni=17 в условии WHERE приводит к пустой выборке? |
| Автор: Deniz 11.9.2008, 08:17 |
| pavelv, A.uni = 17 - пустая выборка потому что При объединении A и B по right, выбираются все записи из B и в строчку подставляются данные из А только когда выполняется условие объединения, прописанное в ON (...). Сл-но получается запись типа и где там A.uni = 17? PS: делай либо в условии объединения или Where B.uni = 17. |
| Автор: pavelv 11.9.2008, 08:49 |
| Всё теперь доехал, тоесть он построил у меня всю модель выборки и потом уже в условии WHERE попробовал найти данные у кт A.uni=17, потому и NULL вернул. Я просто не так понимал порядок выполнения. Клинило, что он сначала всё выполнит(включая Where) ну а уже потом будет делать right join...всем спасибо. |