powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / простой запрос: все записи из одной таблицы + поля из другой
23 сообщений из 23, страница 1 из 1
простой запрос: все записи из одной таблицы + поля из другой
    #33098315
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите,
как одним селектом
выбрать все записи table1 (не больше чем в этой таблице)
+ добавить поля из другой таблицы table2
по условию (table1.id1=table2.id2),
причем для одного значения table1.id1 - во второй таблице записей, удовлетворяющих условию (table1.id1=table2.id2), может быть много (>1)
или не быть вообще (тогда естественно добавлять пустые поля,
вместо полей table2).
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098321
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
SELECT table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098339
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
Код: plaintext
1.
2.
SELECT table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2

Я конечно извиняюсь - но когда я так пробовал - у меня выходило число записей БОЛЬШЕ чем в table1, а мне надо ТОЧНО все записи table1, и ни строкой больше.
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098350
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тогда уточни, какое именно значение (точнее, какую именно запись) из Table2 ты хочешь получить, если условию

table1.id1=table2.id2

удовлетворяет больше одной записи в Table2

И кстати, какая версия FoxPro?
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098361
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМА тогда уточни, какое именно значение (точнее, какую именно запись) из Table2 ты хочешь получить, если условию

table1.id1=table2.id2

удовлетворяет больше одной записи в Table2

И кстати, какая версия FoxPro?

Первую попавшуюся запись из Table2.
Fox7 - да это и не особенно важно.
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098370
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПользовательFox7 - да это и не особенно важно.
:-)))
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098376
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Redrik ПользовательFox7 - да это и не особенно важно.
:-)))
"Не учите меня жить - помогите материально!"
- на чистом SQL - как такое сделать?
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098487
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда, например, берешь код от ВладимирМ и добавляешь группировку по всем полям первой базы... Если "дублей" там нету...
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098627
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RedrikТогда, например, берешь код от ВладимирМ и добавляешь группировку по всем полям первой базы... Если "дублей" там нету...
Дубли там есть - получаем МЕНЬШЕ записей чем в таблице table1...
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098661
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
SELECT RecNo() as _NRec, table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2;
Order By  1 ;
Group By  1 

Но так делать не рекомендуется
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098793
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПользовательДубли там есть - получаем МЕНЬШЕ записей чем в таблице table1...

Пользовательпричем для одного значения table1.id1 - во второй таблице записей, удовлетворяющих условию (table1.id1=table2.id2), может быть много (>1)

Мало того, что у тебя "один-ко-многим" и неважно кого из "многих" ты хочешь видеть в выборке, так выходит, что и table1.id1 не "ключик"???
Т.е. может быть несколько одинаковых table1.id1 , для которых есть куча table2.id2 ?
И шо Вы хочете от такой "базы"?
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33098818
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПользовательПервую попавшуюся запись из Table2.
Fox7 - да это и не особенно важно.
Насчет "не важно" - это Вы зря. Для версии меньше VFP9 такое одним запросом не решается. Нужны 2 последовательных запроса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
* Сначала, отбираем "первые попавшиеся" записи из Table2
* Этот запрос не корректен с точки зрения "чистого" стандарта SQL,
* но в диалекте FoxPro допустим
SELECT * ;
FROM Table2 ;
INTO CURSOR curTable2 NOFILTER ;
GROUP BY Table2.id2

* Теперь объединяем эту выборку с Table1
SELECT table1.*, curTable2.* ;
FROM table1 ;
LEFT JOIN curTable2 ON table1.id1=curTable2.id2
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33099384
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Redrik ПользовательДубли там есть - получаем МЕНЬШЕ записей чем в таблице table1...

Пользовательпричем для одного значения table1.id1 - во второй таблице записей, удовлетворяющих условию (table1.id1=table2.id2), может быть много (>1)

Мало того, что у тебя "один-ко-многим" и неважно кого из "многих" ты хочешь видеть в выборке, так выходит, что и table1.id1 не "ключик"???
Т.е. может быть несколько одинаковых table1.id1 , для которых есть куча table2.id2 ?
И шо Вы хочете от такой "базы"?
Хотим-не хотим - с чем есть-надо-принесли-поставили-заставили и т.д. - с тем и работаем.
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33099411
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maltsev Max
Код: plaintext
1.
2.
3.
4.
5.
SELECT RecNo() as _NRec, table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2;
Order By  1 ;
Group By  1 

Но так делать не рекомендуется
Группировка - понятна,
Order By 1 - вроде необязательно?
и второе- почему не рекомендуется?
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33099501
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь Maltsev Max
Код: plaintext
1.
2.
3.
4.
5.
SELECT RecNo() as _NRec, table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2;
Order By  1 ;
Group By  1 

Но так делать не рекомендуется
Группировка - понятна,
Order By 1 - вроде необязательно?
и второе- почему не рекомендуется?

1) Потому, что в общем случае неясно, из какой именно таблицы будет взято значение Recno()
2) Потому, что в общем случае неясно, какие именно значения полей из Table1 и Table2 будет взяты при одинаковых значениях поля группировки.

Кстати, вместо RECNO(), можно сделать просто группировку по Table1.id1

Код: plaintext
1.
2.
3.
4.
SELECT table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2 ;
Group By Table1.id1
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33099532
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ ПользовательПервую попавшуюся запись из Table2.
Fox7 - да это и не особенно важно.
Насчет "не важно" - это Вы зря. Для версии меньше VFP9 такое одним запросом не решается. Нужны 2 последовательных запроса:

Можно вопрос:
Что надо заменить от девятой версии фокса - (.dll) чтобы
1) фокс7 - работал корректно с join?
2) сторонние программы при работе через ADO Provider=VFPOLEDB.1; - работали корректно с join?
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33099639
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПользовательМожно вопрос:
Что надо заменить от девятой версии фокса - (.dll) чтобы
1) фокс7 - работал корректно с join?
Ничего. Он и так корректно работает. Просто в VFP9 расширили возможность синтаксиса Select-SQL. Например, там стало возможно использовать подзапросу в директиве FROM, а не только в WHERE, как в младших версиях.
Пользователь2) сторонние программы при работе через ADO Provider=VFPOLEDB.1; - работали корректно с join?
Да. В пределах ограничений FoxPro.
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33099697
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ Пользователь Maltsev Max
Код: plaintext
1.
2.
3.
4.
5.
SELECT RecNo() as _NRec, table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2;
Order By  1 ;
Group By  1 

Но так делать не рекомендуется
Группировка - понятна,
Order By 1 - вроде необязательно?
и второе- почему не рекомендуется?

1) Потому, что в общем случае неясно, из какой именно таблицы будет взято значение Recno()
2) Потому, что в общем случае неясно, какие именно значения полей из Table1 и Table2 будет взяты при одинаковых значениях поля группировки.

ВладимирМ, прав. В Общем случае непонятно откуда будет браться номер строки. Но как показала моя практика берется из главной таблицы (та, которая указана в разделе From), и как я ни бился, заставить Фоксу взять номер строки из дочерней таблицы у меня не получилось ...

Order по привычке вставил. Он здесь необязателен. Хотя и не лишний

Кстати, вместо RECNO(), можно сделать просто группировку по Table1.id1

Код: plaintext
1.
2.
3.
4.
SELECT table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2 ;
Group By Table1.id1

Как я понял из поставленного условия, Table1.id1 -- не уникальный ключ. и вообще в этой таблице нет ключа. Если б был, то все эти извращения с номером строки были бы не нужны.
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33100091
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Пользователь!

Не буду учить тебя жить - тут с этим и так справляются :)

Код: plaintext
1.
2.
3.
4.
5.
SELECT T1.id1, T1.uField1, T1.uField2, ... T1.uFieldX, ;
        MAX(NVL(T2.cField1,SPACE( 50 ))) AS t2_cField1, ;
        MIN(NVL(T2.nField2, 00000 . 000 )) AS t2_nField2 ... ;
    FROM Table1 T1 LEFT JOIN Table2 T2 ;
        ON T1.id1 = T2.id2 ;
    GROUP BY T1.id1, T1.uField1, T1.uField2, ... T1.uFieldX

В фоксе пока нету агрегатных функций типа LAST или FIRST - но т.к. тебе без разницы какую запись "присоединять" из второй таблицы - можешь взять MIN или MAX :)

P.S. Понятия НОМЕР ЗАПИСИ равно как и понятия "ФИЗИЧЕСКИЙ ПОРЯДОК" не имеют смысла при работе с SQL - упорядочивать или "выбирать одно из многих" можно лишь на основе значений полей.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33100298
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПользовательХотим-не хотим - с чем есть-надо-принесли-поставили-заставили и т.д. - с тем и работаем.
Имеем:
- 1-ая таблица БЕЗ ключа
- НЕ ИМЕЕТ значения какую запись из 2-ой таблицы присоединить
- нужен ОДИН селект
Бессмысслица какая-то... :-(
Добавь поле, которое сделаешь ключевым! Иначе ОДНИМ селектом не обойдешься... Или VFP-9...
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33100792
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
Hi Пользователь!

Не буду учить тебя жить - тут с этим и так справляются :)

Код: plaintext
1.
2.
3.
4.
5.
SELECT T1.id1, T1.uField1, T1.uField2, ... T1.uFieldX, ;
        MAX(NVL(T2.cField1,SPACE( 50 ))) AS t2_cField1, ;
        MIN(NVL(T2.nField2, 00000 . 000 )) AS t2_nField2 ... ;
    FROM Table1 T1 LEFT JOIN Table2 T2 ;
        ON T1.id1 = T2.id2 ;
    GROUP BY T1.id1, T1.uField1, T1.uField2, ... T1.uFieldX

В фоксе пока нету агрегатных функций типа LAST или FIRST - но т.к. тебе без разницы какую запись "присоединять" из второй таблицы - можешь взять MIN или MAX :)

P.S. Понятия НОМЕР ЗАПИСИ равно как и понятия "ФИЗИЧЕСКИЙ ПОРЯДОК" не имеют смысла при работе с SQL - упорядочивать или "выбирать одно из многих" можно лишь на основе значений полей.

Posted via ActualForum NNTP Server 1.2
Сначала я возрадовался, а как попробовал (сразу осмыслить что в запросе написано - не получается) - то огорчился.
строка:
GROUP BY T1.id1, T1.uField1, T1.uField2, ... T1.uFieldX
означает уникальность - distinct - по таблице T1 - если ее нет - то съедаются записи.
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33100803
Пользователь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maltsev Max
Код: plaintext
1.
2.
3.
4.
5.
SELECT RecNo() as _NRec, table1.*, table2.* ;
FROM table1 ;
LEFT JOIN table2 ON table1.id1=table2.id2;
Order By  1 ;
Group By  1 

Но так делать не рекомендуется
Но (!) раз Maltsev Max рекомендует - надо попробовать:
1) эта штука работает!
2) _NRec - все равны числу строк в таблице table1 (все значения - одно и то же число ! и отсюда совсем непонятно как работает Group By 1 ?)
3) table2.id2 - если их несколько одинаковых - то берется последняя строка.
...
Рейтинг: 0 / 0
простой запрос: все записи из одной таблицы + поля из другой
    #33101723
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Пользователь!

Н-да, видать совсем клинический случай :(
Если всё так плохо, то без RECNO() и промежуточных запросов (или подзапросов в VFP9) видимо никак не победить...
Всё-же на досуге почитай книжки по реляционной теории и сделай нормальную схему данных - работать с правильными структурами легко и приятно - работать с подобным "мусором" мучительно - и без какой-либо гарантии на получение правильного результата...

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


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