Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Получить только одну запис. / 9 сообщений из 9, страница 1 из 1
27.12.2005, 16:58
    #33460112
Starpom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
Добрый день.

Возможно в Selecte получить одну запись в соедененой базе:
Есть:
Первая база "а" вида id as int, name as str в ней записи :
1, "а1"
2, "а2"
Вторая "б" вида id1 as int, name as str в ней записи :
1, "В"
1, "Б"
1, "Г"
2, "К"
2, "К"
связь по id=id1 один->много
Надо:
1, "а1", "В"
2, "а2", "К"

Заранее спасибо.
...
Рейтинг: 0 / 0
27.12.2005, 17:07
    #33460138
jczen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
не понял по какому принципу отбирается именно одна конкретная запись.
Почему в результате (1, "а1", "В") , а не (1, "а1", "Б") Вроде буква "В" среди этого набора ничем не выделяется. Или нужно просто самую первую, встречающуюся? (Если так то заодно интересно практическое применение такой сцепки)
...
Рейтинг: 0 / 0
27.12.2005, 17:15
    #33460163
Starpom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
Не важно какая строчка попадет. Первичный просмотр информации. А если нужно все, то есть кнопочка.
Вот как бы в этот запрос TOP 1 прописать и вопрос бы решился.
------------------------------------------------------------
Не сразу пришло мастерство к молодому саперу.
...
Рейтинг: 0 / 0
27.12.2005, 17:24
    #33460185
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
StarpomНе важно какая строчка попадет. Первичный просмотр информации. А если нужно все, то есть кнопочка.
Вот как бы в этот запрос TOP 1 прописать и вопрос бы решился.
------------------------------------------------------------
Не сразу пришло мастерство к молодому саперу.

Ну раз автор хочет так то:
select a.id, a.name, b.name as name1 from a inner join b on a.id=b.id group by a.id, a.name
...
Рейтинг: 0 / 0
27.12.2005, 17:57
    #33460303
Starpom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
Если б ...
Group by - не работает в таком запросе (у меня) пишет: SQL: GROUP BY clause is invalid (Error 1807)
У меня VFP 9 sp1
--------------------------------------------------------------
Не сразу пришло мастерство к молодому саперу.
...
Рейтинг: 0 / 0
28.12.2005, 05:52
    #33460784
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
Starpom
Первая база "а" вида id as int, name as str в ней записи :
1, "а1"
2, "а2"
Вторая "б" вида id1 as int, name as str в ней записи :
1, "В"
1, "Б"
1, "Г"
2, "К"
2, "К"
связь по id=id1 один->много
Надо:
1, "а1", "В"
2, "а2", "К"
А если так:
Код: plaintext
select a.id, a.name, b.id1, b.name from a, b where a.id=b.id1 order by a.id
...
Рейтинг: 0 / 0
28.12.2005, 09:07
    #33460934
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
StarpomЕсли б ...
Group by - не работает в таком запросе (у меня) пишет: SQL: GROUP BY clause is invalid (Error 1807)
У меня VFP 9 sp1
--------------------------------------------------------------
Не сразу пришло мастерство к молодому саперу.

Ну так в 9-ке вроде поддерживаются подзапросы:
Код: plaintext
select a.id, a.name, (select top  1  b.name from a where a.id=b.id) as name1  from a
...
Рейтинг: 0 / 0
28.12.2005, 19:14
    #33462990
Starpom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
Всем спасибо.
Использовал подзапрос как подсказали, только вынес его в функцию для большего контроля над получаемыми данными.

-----------------------------------------------------------
Не сразу пришло мастерство к молодому саперу.
...
Рейтинг: 0 / 0
29.12.2005, 01:49
    #33463245
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить только одну запис.
Hi Starpom!

Если тебе по барабану какую из множества подходящих показывать, то банально:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select a.id, ;
                  a.name, ;
                  MAX(b.name) as name1 ;
  from a ;
           inner join b ;
                           on a.id=b.id ;
  group by a.id, ;
                  a.name
Или MIN() использовать. К сожалению в фоксе нету конструкции типа
FIRST(b.name ORDER BY b.ID) или аналогичной LAST()... Можно "хитрым"
подзапросом выкрутится (простой подзапрос с TOP 1 не пройдёт увы никак) , но
стоит ли оно того...
Да ещё - если во втором курсоре может НЕ БЫТЬ соответствий, а запись из
первого курсора тем не менее показывать надо - то придётся использовать LEFT
JOIN, и возможно NVL() для того чтобы не пугать пользователей NULL-ами...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Получить только одну запис. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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