Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Снова запрос  [new]
ularsoft
Member

Откуда:
Сообщений: 238
Здравствуйте!
Написал запрос из 3х таблиц:
SELECT m1.ml_kodv,m1.ml_lc,m1.ml_namlc,
d1.do_date,d1.do_lc1,d1.do_lc2,d1.do_sumv,d1.do_sumn,d1.do_kom,
d2.ds_date,d2.ds_lc1,d2.ds_nlatl,d2.ds_adrl FROM Dbmaslc m1 JOIN
Dokod d1 ON m1.ml_lc=d1.do_lc1 JOIN (SELECT d2.ds_date,d2.ds_lc1,d2.ds_nlatl,d2.ds_adrl FROM dokswt) as d2 ON d2.ds_lc1=d1.do_lc1
WHERE d1.do_date BETWEEN "+Thisform.cl_date1+" AND "+Thisform.cl_date2
AND substring(d1.do_lc2,4,5)='10102'
AND substring(d1.do_lc1,4,5)<>'60303'
AND d1.do_lc1=m1.ml_lc and d1.do_kodv=m1.ml_kodv
ORDER BY do_kodv, do_st, do_date, do_lc1, do_lc2
Подскажите пожалуйста, где я не правильно делаю?
12 сен 18, 08:49    [21671727]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1370
ularsoft
Подскажите пожалуйста, где я не правильно делаю?
1. Не описал критерии правильности. Для чего этот запрос, что он должен выбрать - неизвестно.
2.
JOIN (SELECT d2.ds_date,d2.ds_lc1,d2.ds_nlatl,d2.ds_adrl FROM dokswt) as d2 

вызывает сомнения в адекватности писателя. Ибо это всего лишь
JOIN  dokswt as d2 

Больше сказать нечего ибо см. п. 1
12 сен 18, 09:03    [21671734]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
ularsoft
Member

Откуда:
Сообщений: 238
Sergey Sizov
1. Не описал критерии правильности. Для чего этот запрос, что он должен выбрать - неизвестно.
m1 - отправители
ml_kodv - код валюты,
ml_lc - счет отправителя, 
ml_namlc - название отправителя
d1 - проводки
do_date - дата сделки, 
do_lc1 - дебет, 
do_lc2 - кредит, 
do_sumv - сумма в валюте, 
do_sumn - сумма в нацвалюте, 
do_kom - назначение
d2 - получатели
ds_date - дата сделки, 
ds_lc1 - счет получателя, 
ds_nlatl - название получателя, 
ds_adrl - адрес получателя
12 сен 18, 09:34    [21671755]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
ularsoft
Member

Откуда:
Сообщений: 238
Из этих трех надо получить 4 таблицу со следующими полями:
Дт Кт Дата Сумма Сумма Назначение Валюта Страна Название отправителя Название получателя
12 сен 18, 09:41    [21671757]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
Dima T
Member

Откуда:
Сообщений: 13023
ularsoft
Из этих трех надо получить 4 таблицу со следующими полями:
Дт Кт Дата Сумма Сумма Назначение Валюта Страна Название отправителя Название получателя

Убери WHERE, т.к. по ТЗ нужны все записи
12 сен 18, 09:56    [21671779]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
ularsoft
Member

Откуда:
Сообщений: 238
Dima T
Убери WHERE, т.к. по ТЗ нужны все записи
За определенный период нужны записи
12 сен 18, 10:23    [21671800]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
Dima T
Member

Откуда:
Сообщений: 13023
ularsoft
Dima T
Убери WHERE, т.к. по ТЗ нужны все записи
За определенный период нужны записи

Тогда все верно. Проблема в чем?
12 сен 18, 10:28    [21671802]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
Dima T
Member

Откуда:
Сообщений: 13023
Подозрительная строка
WHERE d1.do_date BETWEEN "+Thisform.cl_date1+" AND "+Thisform.cl_date2

Ты запрос на какой-то SQL-сервер отправляешь?
12 сен 18, 10:31    [21671803]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7813
Собственно, Вам уже сказали. Вот это не правильно

JOIN (SELECT d2.ds_date,d2.ds_lc1,d2.ds_nlatl,d2.ds_adrl FROM dokswt) as d2


Не может алиас d2 использоваться внутри подзапроса если это алиас самого подзапроса. Внутри надо или вообще алиасы не использовать, либо указывать dokswt

т.е. или так

JOIN (SELECT dokswt.ds_date,dokswt.ds_lc1,dokswt.ds_nlatl,dokswt.ds_adrl FROM dokswt) as d2


или так

JOIN (SELECT ds_date,ds_lc1,ds_nlatl,ds_adrl FROM dokswt) as d2
12 сен 18, 10:36    [21671810]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7813
Ну, и с датами тоже вопрос. Обычно даты окружены какими-то спец.символами. Например, в FoxPro - это фигурные скобки. В MS SQL обычно передают как символьную строку, т.е. в одинарных кавычках. Есть еще вариант окружать символами решетки

Т.е. формировать строка в виде

WHERE d1.do_date BETWEEN "+Thisform.cl_date1+" AND "+Thisform.cl_date2


недостаточно. Надо добавить символы-ограничители дат и, возможно, преобразовать даты к нужному формату
12 сен 18, 10:41    [21671816]     Ответить | Цитировать Сообщить модератору
 Re: Снова запрос  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1370
А если Thisform.cl_date1 и Thisform.cl_date2 типа date, то вообще никаких ограничителей не надо:
BETWEEN Thisform.cl_date1 AND Thisform.cl_date2
12 сен 18, 12:03    [21671935]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить