Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вродебы обычная выборка / 17 сообщений из 17, страница 1 из 1
02.11.2012, 10:51
    #38022907
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Здравствуйте. Нужна помощь есть таблица1 с полями idrasmater(ID записи), data(дата), kol(количество1), idmater(материал1), kol1(количество2), idmater1(материал2), kol2, idmater2, kol3, idmater3, kol4, idmater4 и таблица2 с полями idmater(ID материала), matername(название материала).
Мне нужно вывести в грид таблицу1 только вместо idmater, idmater1, idmater2...idmater4 нужно отображать matername из 2 таблице
...
Рейтинг: 0 / 0
02.11.2012, 10:57
    #38022921
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Mihail3,
Ye так сделай SELECT из 2-х таблиц и свяжи их ID
...
Рейтинг: 0 / 0
02.11.2012, 11:05
    #38022937
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Mihail3,

должен быть индекс по id у таблица2
пропиши в колонке

IIF(SEEK(idmater, 'таблица2', 'id'), таблица2.matername, 'нету')
...
Рейтинг: 0 / 0
02.11.2012, 12:12
    #38023121
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
select * from t1, t2 ;
where t1.idmater=t2.idmater and ;
t1.idmater1=t2.idmater and ;
t1.idmater2=t2.idmater and ;
t1.idmater3=t2.idmater and ;
t1.idmater4=t2.idmater
Into Cursor t3

Пустой курсор без записей только одна структура
...
Рейтинг: 0 / 0
02.11.2012, 12:27
    #38023156
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
alextashkMihail3,

должен быть индекс по id у таблица2
пропиши в колонке

IIF(SEEK(idmater, 'таблица2', 'id'), таблица2.matername, 'нету')

Для чего это я, что то не понял, объясните пожалуйста, таблица 2 это просто справочник материала
...
Рейтинг: 0 / 0
02.11.2012, 12:36
    #38023178
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Mihail3,

А что все t1.idmater1,t1.idmater2,t1.idmater3,t1.idmater4 равны t2.idmater?
...
Рейтинг: 0 / 0
02.11.2012, 13:06
    #38023239
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
IgorNG,

Ну пример table1
kol idmater kol1 idmater1 kol2 idmater1
208,8000 602 0,0000 0 78,0000 56
425,7000 447 0,0000 0 0,0000 0
500,0004 29 712,0596 238 20,0000 59


И table2
56 АК12-М2
59 ЦАМ-4-1
238 АБС 2020-30 чёрный
29 Полипропилен 21030-16Н
447 Армлен ПП ТМ 20-4УПС-901 чёрный
208 Армлен ПП ТМ 20-2-901 чёрный
15 АБС 2020-30 натуральный
16 Полипропилен дроблённый




а мне в грид надо вывести таблицу 1 только вместо idmater должны отображаться названия из 2 таблицы
...
Рейтинг: 0 / 0
02.11.2012, 13:58
    #38023334
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Mihail3,

Нужно JOIN использовать для выборки из двух таблиц.
Help -> SELECT - SQL
...
Рейтинг: 0 / 0
02.11.2012, 14:17
    #38023378
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
IgorNGMihail3,

Нужно JOIN использовать для выборки из двух таблиц.
Help -> SELECT - SQL
Да если бы я не почитиал я бы и не посал, читал я уже так ничего и не придумал. Поэтому и пишу. Про F1 я знаю хорошо, но сейчас именно нужна помощь более опытных специалистов
...
Рейтинг: 0 / 0
02.11.2012, 14:27
    #38023394
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
У тебя изначально таблица не нормализованная, поэтому стандартные средства не подходят.
Раз у тебя в одной записи четыре ссылки на справочник, то в запросе справочник надо присоединять четыре раза.
Как-то так:
Код: sql
1.
2.
3.
select * from t1;
     join t2 S1 on t1.idmater1 = S1.idmater;
     join t2 S2 on t1.idmater2 = S2.idmater
...
Рейтинг: 0 / 0
02.11.2012, 14:51
    #38023444
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Dima T, да согласен первая таблица имеет отвратительную структура и она не должна быть такой, но ее таковой сделали до меня и непонятно почему. И поэтому приходится мучиться.
Спасибо вам за помощь, только запрос который вы написали все равно выводит пустой курсор, но с еще большим количеством полей. Я его переписал, но понять не понял до конца, так как никогда не понимал что он делает. Очень много про него читал но так все равно до меня и не дошло. А есть еще какие варианты уже весь день сижу над этой выборкой...
...
Рейтинг: 0 / 0
02.11.2012, 14:52
    #38023447
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Mihail3 так как никогда не понимал что он делает. Очень много про него читал но так все равно до меня и не дошло.
Это я про JOIN
...
Рейтинг: 0 / 0
02.11.2012, 15:08
    #38023474
Reese
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Примеры таблиц приложи.
автортак как никогда не понимал что он делает. Очень много про него читал но так все равно до меня и не дошло.

Select * from t1, t2 where t1.id=t2.parentID
Равносильно
select * from t1 inner join t2 on t2.parentID=t1.id

Может это поможет для понимания.
Вообще это очень важно для работы с БД. Так что обязательно надо разобраться.
...
Рейтинг: 0 / 0
02.11.2012, 15:13
    #38023490
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Reese,а если равносильно выборкам через select то зачем это? я вот уже как 4 месяца на FoxPro работаю и всегда все через Select
...
Рейтинг: 0 / 0
02.11.2012, 15:23
    #38023513
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Mihail3Dima T, да согласен первая таблица имеет отвратительную структура и она не должна быть такой, но ее таковой сделали до меня и непонятно почему. И поэтому приходится мучиться.
Спасибо вам за помощь, только запрос который вы написали все равно выводит пустой курсор, но с еще большим количеством полей. Я его переписал, но понять не понял до конца, так как никогда не понимал что он делает. Очень много про него читал но так все равно до меня и не дошло. А есть еще какие варианты уже весь день сижу над этой выборкой...
я запустил на твоих данных - у меня одна строчка вышла, т.к. у тебя есть нули в t1.idmater, то такая строка не выберется, т.к. нет такого материала в t2. Поэтому надо left join
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create cursor t1 (kol y, idmater i, kol1 y, idmater1 i, kol2 y, idmater2 i)
insert into t1 values (208.8000, 602, 0.0000, 0, 78.0000, 56)
insert into t1 values (425.7000, 447, 0.0000, 0, 0.0000, 0)
insert into t1 values (500.0004, 29, 712.0596, 238, 20.0000, 59)

create cursor t2 (idmater i, matername c(20))
insert into t2 values (56, 'АК12-М2')
insert into t2 values (59, 'ЦАМ-4-1')
insert into t2 values (238, 'АБС 2020-30 чёрный ')
insert into t2 values (29, 'Полипропилен 21030-16Н') 
insert into t2 values (447, 'Армлен ПП ТМ 20-4УПС-901 чёрный ')
insert into t2 values (208, 'Армлен ПП ТМ 20-2-901 чёрный ')
insert into t2 values (15, 'АБС 2020-30 натуральный ')
insert into t2 values (16, 'Полипропилен дроблённый ')

select * from t1;
     left join t2 S1 on t1.idmater1 = S1.idmater;
     left join t2 S2 on t1.idmater2 = S2.idmater


А то что полей больше стало - замени * на список нужный, например
Код: sql
1.
2.
3.
select T1.kol1, S1.matername as mater1,T1.kol2, S2.matername as mater2 from t1;
     left join t2 S1 on t1.idmater1 = S1.idmater;
     left join t2 S2 on t1.idmater2 = S2.idmater
...
Рейтинг: 0 / 0
02.11.2012, 15:28
    #38023525
Mihail3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
Спасибо всем огромное. То есть нужно делать через JOIN я понял. Так как рабочий день подходит к концу а дома ни базы с MS SQL Server ни проекта программы, то буду разбираться с работой JOINа. Еще раз спасибо всем огромное
...
Рейтинг: 0 / 0
02.11.2012, 15:59
    #38023601
Reese
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вродебы обычная выборка
авторReese,а если равносильно выборкам через select то зачем это? я вот уже как 4 месяца на FoxPro работаю и всегда все через Select

Это один и тот же select но с разным способом описания join-а
При явном указании join появляется возможность указать тип соединения inner, full, left/right.
Применительно к фоксу есть еще один момент. При неявном указании join (т.е. соединение через from и where) фокс может "забыть" про индекс, по которому идет соединении одной из таблиц. Я на такое часто наталкивался в 6-ом фоксе при соединении более 3-х таблиц.

Ну и к тому же такой код читать легче.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вродебы обычная выборка / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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