Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка / 25 сообщений из 28, страница 1 из 2
27.11.2012, 15:14
    #38054927
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
помогите пожалуйста разобраться. есть таблица таб1 с полем id есть таблица таб2 тоже с полем id по этому полю их можно связать. Мне нужно в курсор вывести данные из первой таблицы, и рядом с полем id выводить поле id из таб2
...
Рейтинг: 0 / 0
27.11.2012, 15:19
    #38054936
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Код: sql
1.
select * from t1 join t2 on t1.id = t2.id into cursor MyCursor


Вместо * можно перечислить только нужные поля
...
Рейтинг: 0 / 0
27.11.2012, 15:20
    #38054943
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Dima T, вот, точно также я писала но выборка пустая. Значит нету таких результатов. Спасибо, просто хотела убедиться чтоя правильно делаю
...
Рейтинг: 0 / 0
27.11.2012, 15:25
    #38054954
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
МеганFOX90просто хотела убедиться чтоя правильно делаю
можно просто посмотреть в обе таблицы и понять что там нет одинаковых значений ID

Подозреваю что делаешь ты все-таки неправильно. ID скорее всего означают разные вещи и связывать по ним никак не надо.
Это примерно как глядя на часы вводить пин-код в банкомате. Вроде на часах 4 цифры, и пин-код 4, а не помогает
...
Рейтинг: 0 / 0
27.11.2012, 15:53
    #38055020
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Dima T, нет нет правильно делаю, просто в таблицах много значений больше 2000 в каждой. небольшое обновление таблицы помогло. Разобралась уже.
...
Рейтинг: 0 / 0
27.11.2012, 16:34
    #38055131
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Помогите доработать запрос..

Код: sql
1.
SELECT Tab1.*,Tab1.fio FROM Tab1,Tab2 WHERE Tab1.id=Tab2.id INTO CURSOR Tab


Мне нужно сделать так чтобы если в Tab2 поле id пустое, то в поле fio у курсора Tab была пустая строка, а если есть поле id не пустое то как есть мой запрос выполнялся
...
Рейтинг: 0 / 0
27.11.2012, 16:35
    #38055135
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
в общем мне нужно сделать так чтобы данные не потерялись из этого условия в моем запросе
...
Рейтинг: 0 / 0
27.11.2012, 16:41
    #38055155
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Код: sql
1.
SELECT Tab1.*,Tab2.fio FROM Tab1 left join Tab2 on Tab1.id=Tab2.id INTO CURSOR Tab
...
Рейтинг: 0 / 0
27.11.2012, 16:48
    #38055177
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Dima T, и она будет так работать?
...
Рейтинг: 0 / 0
27.11.2012, 16:50
    #38055184
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Dima T, ой ой ой я не так написала. Если в Tab1 поле vr пустое, то пустую строку надо, иначе как есть чтобы отобразилось
...
Рейтинг: 0 / 0
27.11.2012, 16:56
    #38055195
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Нет с помощью left join теряются данные. Посмотрите пож. мой код и если неправильно поправьте

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SCAN
IF EMPTY(tab1.id)
tab1.id=''
SELECT tab1.*,tab2.fio FROM tab1,tab2 WHERE tab1.id=tab2.id INTO CURSOR tab
ELSE 
SELECT tab1.*,tab2.fio FROM tab1,tab2 WHERE tab1.id=tab2.id INTO CURSOR tab
ENDIF 
LOOP 
ENDSCAN 
...
Рейтинг: 0 / 0
27.11.2012, 17:03
    #38055228
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
МеганFOX90
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SCAN
IF EMPTY(tab1.id)
tab1.id=''
SELECT tab1.*,tab2.fio FROM tab1,tab2 WHERE tab1.id=tab2.id INTO CURSOR tab
ELSE 
SELECT tab1.*,tab2.fio FROM tab1,tab2 WHERE tab1.id=tab2.id INTO CURSOR tab
ENDIF 
LOOP 
ENDSCAN 


бред какой-то
хоть чуть-чуть представление есть что каждая команда в твоем коде делает? Попытайся осмыслить эту писанину.
SCAN ... ENDSCAN - цикл-перебор по одной записи
SELECT - делает выборку из таблицы, т.е. перебирает все записи за раз таблиц указанных во FROM.

Вобщем твой код выполняет один и тот же запрос столько раз сколько записей в той таблице по которой SCAN и он полностью равнозначен такому коду
Код: sql
1.
SELECT tab1.*,tab2.fio FROM tab1,tab2 WHERE tab1.id=tab2.id INTO CURSOR tab
...
Рейтинг: 0 / 0
27.11.2012, 17:05
    #38055237
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
МеганFOX90Нет с помощью left join теряются данные. Посмотрите пож. мой код и если неправильно поправьте

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SCAN
IF EMPTY(tab1.id)
tab1.id=''
SELECT tab1.*,tab2.fio FROM tab1,tab2 WHERE tab1.id=tab2.id INTO CURSOR tab
ELSE 
SELECT tab1.*,tab2.fio FROM tab1,tab2 WHERE tab1.id=tab2.id INTO CURSOR tab
ENDIF 
LOOP 
ENDSCAN 



И чем отличаются эти два запроса?
А как вы думаете, реально значение в поле изvенится? tab1.id=''
А LOOP зачем в цикле SCAN...ENDSCAN

Опять же, Вы пишите что Вы делаете, считая что делаете это правильно. А нужно описать задачу, которую Вы решаете, желательно с каким-то минимальным набором данных.
Тогда и правильный ответ получите быстрее.
...
Рейтинг: 0 / 0
27.11.2012, 17:42
    #38055304
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
IgorNG, Думала смогу объяснить на простом примере не касаясь истинных таблиц но не получается. В общем есть две таблицы одна называется Prodazha, а другая Prodavec. В обеих таблицах есть поле id. В таблице Prodavec id это его идентификатор, а в таблице Prodazha id хранит идентификатор продавца. Ну типа этот товар продал продавец с таким ID. Теперь нужно выполнить запрос такой:

Код: sql
1.
SELECT Prodazha.*,Prodavec.fio FROM Prodazha,Prodavec WHERE Prodazha.id=Prodavec.id INTO CURSOR Tab


т.е мне нужно выводить полностью все данные из первой таблицы (Prodazha) и колонку id из таблицы Prodavec.

Если id=id то все получается правильно. Но могут быть случаи, когда в Prodazha.id нету значения. Нужно для таких случаев выводить пустую строку, а если есть значение то выводить как и выводит мой запрос.
...
Рейтинг: 0 / 0
27.11.2012, 17:53
    #38055331
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
МеганFOX90IgorNG, Думала смогу объяснить на простом примере не касаясь истинных таблиц но не получается. В общем есть две таблицы одна называется Prodazha, а другая Prodavec. В обеих таблицах есть поле id. В таблице Prodavec id это его идентификатор, а в таблице Prodazha id хранит идентификатор продавца. Ну типа этот товар продал продавец с таким ID. Теперь нужно выполнить запрос такой:

Код: sql
1.
SELECT Prodazha.*,Prodavec.fio FROM Prodazha,Prodavec WHERE Prodazha.id=Prodavec.id INTO CURSOR Tab


т.е мне нужно выводить полностью все данные из первой таблицы (Prodazha) и колонку id из таблицы Prodavec.

Если id=id то все получается правильно. Но могут быть случаи, когда в Prodazha.id нету значения. Нужно для таких случаев выводить пустую строку, а если есть значение то выводить как и выводит мой запрос.
Ну так я же писал про LEFT JOIN. он как раз для этих целей и придуман.
Код: sql
1.
SELECT Prodazha.*,Prodavec.fio FROM Prodazha LEFT JOIN Prodavec on Prodazha.id=Prodavec.id INTO CURSOR Tab


только наверно не Prodazha.id а что-то типа Prodazha.Prodavec_id

PS Настоятельно советую почитать книжку про язык SQL.
...
Рейтинг: 0 / 0
27.11.2012, 17:59
    #38055342
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
МеганFOX90,

CREATE CURSOR prodazhi tab1 (id I)
INSERT INTO prodazhi VALUES (1)
INSERT INTO prodazhi VALUES (2)
INSERT INTO prodazhi VALUES (3)
INSERT INTO prodazhi VALUES (4)
INSERT INTO prodazhi VALUES (6)
INSERT INTO prodazhi VALUES (7)
INSERT INTO prodazhi VALUES (8)
CREATE CURSOR prodavec tab2 (id I, fio C(10))
INSERT INTO prodavec VALUES (1, "Иванов")
INSERT INTO prodavec VALUES (2, "Петров")
INSERT INTO prodavec VALUES (3, "Сидоров")
INSERT INTO prodavec VALUES (4, "Смирнов")
INSERT INTO prodavec VALUES (5, "Федосеев")
INSERT INTO prodavec VALUES (6, "Пупкин")
INSERT INTO prodavec VALUES (7, "Золотарев")
INSERT INTO prodavec VALUES (8, "Сандунов")
SELECT prodazhi.id,prodavec.* FROM prodavec left join prodazhi on prodazhi.id=prodavec.id INTO CURSOR Tab3
BROWSE
...
Рейтинг: 0 / 0
27.11.2012, 21:56
    #38055549
Выборка
Dima TНу так я же писал про LEFT JOIN. он как раз для этих целей и придуман.

Вообще-то в данном конкретном запросе в постановке ТС нужен не Left, a Right join... Хотя можно таблицы местами переставить...
...
Рейтинг: 0 / 0
27.11.2012, 23:30
    #38055614
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
МеганFOX90 Если id=id то все получается правильно. Но могут быть случаи, когда в Prodazha.id нету значения. Нужно для таких случаев выводить пустую строку, а если есть значение то выводить как и выводит мой запрос.
т.е. у продажи индентификатор продаца может быть пустой ? Тогда ни LEFT ни RIGHT JOIN не помогут. Вам надо использовать UNION. Ибо JOIN будет пропускать строки с пустым ID.
prodavec
ID FIO_3NK1DLE0S Вася _3NK1DLIDH Петя _3NK1DLL7H Коля
prodazha
ID prodavec_id tovar__3NK1DNH00 _3NK1DLE0S Печенька _3NK1DNR46 _3NK1DLE0S Варенька _3NK1DNYIN _3NK1DLL7H Вкусняшка _3NK1DO6OI _3NK1DLL7H Ням-няшка _3NK1DOLJ8 Хрень из под полы _3NK1DOTWF Еще хрень из под полы
Если я правильно понял задание то в результате выполенеи запроса
Код: sql
1.
SELECT a.id, a.tovar, b.fio, b.id as prodavec_id FROM prodazha as a INNER JOIN prodavec as b ON a.prodavec_id=b.id UNION (select id, tovar, "", "" FROM prodazha WHERE EMPTY(prodavec_id))


должно получиться
ID Tovar FIO PRODAVEC_ID_3NK1DNH00 Печенька Вася_3NK1DLE0S _3NK1DNR46 Варенька Вася_3NK1DLE0S _3NK1DNYIN Вкусняшка Коля_3NK1DLL7H _3NK1DO6OIНям-няшка Коля _3NK1DLL7H_3NK1DOLJ8Хрень из под полы _3NK1DOTWFЕще хрень из под полы

Это то что хотелось ? Я только не понял, что значит фраза "Нужно для таких случаев выводить пустую строку" ? Какой смысл в пустой строке ?
...
Рейтинг: 0 / 0
27.11.2012, 23:38
    #38055621
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
thunder2,

Так прошу прощения, немного пояснения. Пропуск записей будет тогда, когда в таблице PRODAZHA небудет отдельного столбца ID, а столбец PRODAVEC_ID будет называться просто ID, т.е. таблица prodazha будет такой:
ID tovar_3NK1DLE0S Печенька _3NK1DLE0S Варенька _3NK1DLL7H Вкусняшка _3NK1DLL7H Ням-няшка Хрень из под полы Еще хрень из под полы
Если же таблицу prodazha нормальзовать, как в примере, то вам правильно говорили использовать LEFT JOIN и запрос будет простой:
Код: sql
1.
SELECT a.id, a.tovar, b.fio, b.id as prodavec_id FROM prodazha as a LEFT JOIN prodavec as b ON a.prodavec_id=b.id
...
Рейтинг: 0 / 0
28.11.2012, 09:36
    #38055822
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Вот этот запрос помог выводить так как нужно.

Код: sql
1.
SELECT Prodazha.*,Prodavec.fio FROM Prodazha LEFT JOIN Prodavec on Prodazha.id=Prodavec.id INTO CURSOR Tab



теперь у меня в грид идет вывод

thisform.grid2.Column8.ControlSource='Tab.fio'

но, если нету врача выводится NULL, можно ли вместо NULL выводить например "Врач не указан"?
...
Рейтинг: 0 / 0
28.11.2012, 09:44
    #38055832
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Блин врач говорю, начиталась других постов про врачей и на врачей перешла)). Вот так пишу что-то не получается все равно
Код: sql
1.
thisform.grid2.Column8.ControlSource=IIF(tab.fio=.NULL.,'Продавец не указан','tab.fio')
...
Рейтинг: 0 / 0
28.11.2012, 09:47
    #38055833
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
tab.fio=.NULL. так нельзя на NULL проверять. Правильно так
Код: sql
1.
thisform.grid2.Column8.ControlSource=IIF(isnull(tab.fio),'Продавец не указан','tab.fio')


или так
Код: sql
1.
thisform.grid2.Column8.ControlSource=nvl(tab.fio,'Продавец не указан')
...
Рейтинг: 0 / 0
28.11.2012, 09:49
    #38055836
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Можно в самом запросе заменить
Код: sql
1.
SELECT Prodazha.*,nvl(Prodavec.fio,'Продавец не указан') as fio  FROM Prodazha LEFT JOIN Prodavec on Prodazha.id=Prodavec.id INTO CURSOR Tab
...
Рейтинг: 0 / 0
28.11.2012, 09:59
    #38055847
МеганFOX90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
Dima T, Что-то я попробовала оба варианта, .NULL. все равно выводит в грид

Код: sql
1.
thisform.grid2.Column8.ControlSource=IIF(isnull(tab.fio),'Продавец не указан','tab.fio')



из-за чего это может быть?
...
Рейтинг: 0 / 0
28.11.2012, 10:12
    #38055859
ArgonS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка
МеганFOX90,

как вариант
Код: sql
1.
thisform.grid2.Column8.ControlSource=IIF(tab.fio=' ','Продавец не указан','tab.fio')
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выборка / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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