Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Right JOIN, работал и тут что-то не понятно 
:(
    Опции темы
pavelv
Дата 11.9.2008, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Всем привет.
Сервер FireBird 2.1.0.17798.

Всегда думал, что right join работает следующим образом: Если даже нет данных в основной выборке, а в таблице Right Join есть то они и вернуться.

Тут на днях всё делаю и бац, не работает. Начал разбираться и понял, что то чего я собственно думал не верно.
Итак запрос:

Код

Select A.uni, B.uni
from A
right join B ON B.uni=A.uni
where A.uni=17

В таблице A нет данных у которых Uni = 17, но в таблице B есть данные у которых uni = 17. Итого результатом запроса должно быть:
NULL, 17
 или я что-то путаю?

Конечно можно всегда поменять таблицы местами и использовать Left join A, но хочется разобраться. 

P.S> Ногами не бейте smile.

Добавлено через 55 секунд
Эм поправка, результатом будет 
NULL, 17 
если в таблице B есть одна запись у которой UNI=17.
PM MAIL   Вверх
ТоляМБА
Дата 11.9.2008, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 1
Всего: 252



Код
Select A.uni, B.uni
from A
right join B ON B.uni=A.uni
AND A.uni=17


А так?
PM   Вверх
pavelv
Дата 11.9.2008, 06:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Deniz
Дата 11.9.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



pavelv, A.uni = 17 - пустая выборка потому что
Цитата(pavelv @  11.9.2008,  08:07 Найти цитируемый пост)
В таблице A нет данных у которых Uni = 17

При объединении A и B по right, выбираются все записи из B и в строчку подставляются данные из А только когда выполняется условие объединения, прописанное в ON (...).
Сл-но получается запись типа 
Цитата(pavelv @  11.9.2008,  08:07 Найти цитируемый пост)
NULL, 17
и где там A.uni = 17?
PS: делай либо в условии объединения или Where B.uni = 17.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
pavelv
Дата 11.9.2008, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Всё теперь доехал, тоесть он построил у меня всю модель выборки и потом уже в условии WHERE попробовал найти данные у кт A.uni=17, потому и NULL вернул. Я просто не так понимал порядок выполнения. Клинило, что он сначала всё выполнит(включая Where) ну а уже потом будет делать right join...всем спасибо.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.