Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Left join только первую запись по условию / 7 сообщений из 7, страница 1 из 1
18.12.2014, 19:36
    #38837530
Samotek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left join только первую запись по условию
Привет. Есть две таблицы один ко многим надо получить запрос по первой, добавив поле из второй по первой попвшейся записи
Пробовал так
Код: plsql
1.
2.
3.
select a.id, t2.f2
from a
left join (select aid, f1, f2 from b where b.F1 = 1 rows 1) t2 on t2.aid = a.Id



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
a:
1
2
b:
aId f1 f2
1   1   1
2   1   2
2   1   3



хотел бы , чтоб таблица из left join возвращала только первую запись

Код: plsql
1.
2.
1 1
2 (2 или 3)


А получаю две записи(как и планировал), но во второй поле t2.f2 равно null. Вроде как выполнила первый запрос для left join, а потом только по его результатам для остальных записей. Как сделать то, что мне надо?
...
Рейтинг: 0 / 0
18.12.2014, 19:43
    #38837535
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left join только первую запись по условию
Hello, Samotek!
You wrote on 18 декабря 2014 г. 19:41:33:

Samotek добавив поле из второй по первой попвшейся записи
йад в аптеке.
инвалидам бесплатно.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.12.2014, 19:47
    #38837539
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left join только первую запись по условию
Samotek,

http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-first-skip
http://www.sql.ru/forum/605209/a-kak-rabotaet-select-first-xx

Но почему бы тебе вместо извращений не использовать нормальные агрегаты навроде MAX, MIN ?
...
Рейтинг: 0 / 0
18.12.2014, 19:51
    #38837540
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left join только первую запись по условию
Samotek,

select a.id, MAX(b.f2) as f2
from a, b
where b.aid = a.Id
...
Рейтинг: 0 / 0
18.12.2014, 19:58
    #38837547
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left join только первую запись по условию
Или, если совсем хочется умучать сервер, то например

Код: sql
1.
2.
select a.id, (select f2 from b where b.aid = a.Id rows 1) f2
from a
...
Рейтинг: 0 / 0
18.12.2014, 20:38
    #38837569
Samotek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left join только первую запись по условию
Arioch,
То есть напрямую нельзя. В принципе могу использовать MAX MIN спасибо не сообразил , а
Код: plsql
1.
2.
select a.id, (select f2 from b where b.aid = a.Id rows 1) f2
from a


не годится - в рельно выбранных полях b.f2 используется как параметр
Спасибо.
...
Рейтинг: 0 / 0
18.12.2014, 20:45
    #38837575
Samotek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left join только первую запись по условию
AriochSamotek,

http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-first-skip
http://www.sql.ru/forum/605209/a-kak-rabotaet-select-first-xx

first то-же что и rows. Эти я попробовал - не получается, а с мах и мин завтра попробую, но должно получится.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Left join только первую запись по условию / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]