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


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

Подозреваю что делаешь ты все-таки неправильно. ID скорее всего означают разные вещи и связывать по ним никак не надо.
Это примерно как глядя на часы вводить пин-код в банкомате. Вроде на часах 4 цифры, и пин-код 4, а не помогает
...
Рейтинг: 0 / 0
Выборка
    #38055020
МеганFOX90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, нет нет правильно делаю, просто в таблицах много значений больше 2000 в каждой. небольшое обновление таблицы помогло. Разобралась уже.
...
Рейтинг: 0 / 0
Выборка
    #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
Выборка
    #38055135
МеганFOX90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем мне нужно сделать так чтобы данные не потерялись из этого условия в моем запросе
...
Рейтинг: 0 / 0
Выборка
    #38055155
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT Tab1.*,Tab2.fio FROM Tab1 left join Tab2 on Tab1.id=Tab2.id INTO CURSOR Tab
...
Рейтинг: 0 / 0
Выборка
    #38055177
МеганFOX90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, и она будет так работать?
...
Рейтинг: 0 / 0
Выборка
    #38055184
МеганFOX90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, ой ой ой я не так написала. Если в Tab1 поле vr пустое, то пустую строку надо, иначе как есть чтобы отобразилось
...
Рейтинг: 0 / 0
Выборка
    #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
Выборка
    #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
Выборка
    #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
Выборка
    #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
Выборка
    #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
Выборка
    #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
Выборка
    #38055549
Dima TНу так я же писал про LEFT JOIN. он как раз для этих целей и придуман.

Вообще-то в данном конкретном запросе в постановке ТС нужен не Left, a Right join... Хотя можно таблицы местами переставить...
...
Рейтинг: 0 / 0
Выборка
    #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
Выборка
    #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
Выборка
    #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
Выборка
    #38055832
МеганFOX90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин врач говорю, начиталась других постов про врачей и на врачей перешла)). Вот так пишу что-то не получается все равно
Код: sql
1.
thisform.grid2.Column8.ControlSource=IIF(tab.fio=.NULL.,'Продавец не указан','tab.fio')
...
Рейтинг: 0 / 0
Выборка
    #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
Выборка
    #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
Выборка
    #38055847
МеганFOX90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Что-то я попробовала оба варианта, .NULL. все равно выводит в грид

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



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

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


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