Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
 Re: Правильная работа с MySQL  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 266
Спасибо. Стало лучше. Поле в запросе итоговом уже есть. Но оно пока пустое, предполагаю, что там Null.

SELECT SC.*,TW.NAIM AS NTOW,TW.CENA_ZAK AS CENA_ZAK,VYD.KOLVYD FROM SCHETA SC ;
LEFT JOIN TOWAR TW ON SC.KODTOW=TW.KODTOW ;
LEFT JOIN (SELECT BB.KODTOW,SUM(BB.KOLVO) AS KOLVYD,AA.KODSCE FROM DOKUMNAK AA,NAKLAD BB GROUP BY BB.KODTOW,AA.KODSCE) VYD ON SC.KODTOW = VYD.KODTOW AND SC.KODDOK=VYD.KODSCE WHERE SC.KODDOK=?M_KODSCE

Что не так? Естественно накладные есть и позиции в них тоже есть. Почему полученный подзапрос не возвращает количество?

Я бы с радостью почитал, о том как писать такие запросы, но даже не могу найти примера подобного.
Ваши примеры мне сильно помогают: с Left Join - уже нет проблем.
27 ноя 18, 10:19    [21745757]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 266
Dima T
MaestroEv,

Счет один или много? Если один, как в примере выше 21734842, то
... LEFT JOIN (
      SELECT BB.KODTOW, SUM(BB.KOLVO) AS KOLVYD 
                 FROM DOKUMNAK AA join NAKLAD BB on AA.??? = BB.??? WHERE AA.KODSCE=M.KODDOK 
                 GROUP BY KODTOW
         ) ...


Если много, то давай структуру таблиц, можно только используемые поля (по которым связи и данные, участвующие в расчетах).

PS Читай книжки.


Спасибо. То есть подселект - может быть как обычный селект? Вот такой синтаксис мне понятен, но дает ошибку. Что не так?
Можно же внутри без Join? 18 лет в фоксе без джин обходился :(

... LEFT JOIN (SELECT SUM(BB.KOLVO) AS KOLVYD,BB.KODTOW FROM DOKUMNAK AA,NAKLAD BB GROUP BY KODTOW WHERE AA.KODSCE=?M_KODSCE AND AA.KOD=BB.KODDOK) VYD ON SC.KODTOW = VYD.KODTOW WHERE SC.KODDOK=?M_KODSCE...
27 ноя 18, 10:31    [21745774]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
Dima T
Member

Откуда:
Сообщений: 13344
Ты бы код форматировал прежде чем сюда постить
SELECT SC.*,TW.NAIM AS NTOW,TW.CENA_ZAK AS CENA_ZAK,VYD.KOLVYD 
    FROM SCHETA SC
       LEFT JOIN TOWAR TW ON SC.KODTOW=TW.KODTOW ;
       LEFT JOIN (SELECT BB.KODTOW,SUM(BB.KOLVO) AS KOLVYD,AA.KODSCE 
                        FROM DOKUMNAK AA,NAKLAD BB 
                        GROUP BY BB.KODTOW,AA.KODSCE
             ) VYD ON SC.KODTOW = VYD.KODTOW AND SC.KODDOK=VYD.KODSCE 
    WHERE SC.KODDOK=?M_KODSCE

В выделенной строке join надо.
27 ноя 18, 10:34    [21745777]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
Dima T
Member

Откуда:
Сообщений: 13344
MaestroEv
Можно же внутри без Join? 18 лет в фоксе без джин обходился :(

Можно, но не нужно. Читать такой запрос неудобно. С join понятно где условие связи таблиц, а где условия отбора. Если все упихать во where то получается каша, особенно если таблиц намного больше двух. Лучше привыкай к join. Фокс join тоже понимает.
27 ноя 18, 10:39    [21745783]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
Dima T
Member

Откуда:
Сообщений: 13344
MaestroEv
То есть подселект - может быть как обычный селект? Вот такой синтаксис мне понятен, но дает ошибку. Что не так?

Да, подселект можно запустить без внешнего, если не используются поля внешнего.

SELECT SUM(BB.KOLVO) AS KOLVYD,BB.KODTOW 
          FROM DOKUMNAK AA,NAKLAD BB 
          WHERE AA.KODSCE=?M_KODSCE AND AA.KOD=BB.KODDOK
          GROUP BY KODTOW 

Сначала пишется WHERE а потом GROUP BY.
Фокс такое пропустит, а MySQL ругнется. В остальном вроде правильно.
27 ноя 18, 10:49    [21745792]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 266
Dima T
MaestroEv
Можно же внутри без Join? 18 лет в фоксе без джин обходился :(

Можно, но не нужно. Читать такой запрос неудобно. С join понятно где условие связи таблиц, а где условия отбора. Если все упихать во where то получается каша, особенно если таблиц намного больше двух. Лучше привыкай к join. Фокс join тоже понимает.


Согласен. Так удобнее читать. Теперь уже в MySQL придется все писать как надо.

Дает ошибку. Что не так? Без Where в подзапросе - виснет насмерть.

...LEFT JOIN (SELECT SUM(BB.KOLVO) AS KOLVYD,BB.KODTOW,AA.KODSCE FROM DOKUMNAK AA JOIN NAKLAD BB ON AA.KOD=BB.KODDOK GROUP BY BB.KODTOW,AA.KODSCE WHERE AA.KODSCE=?M_KODSCE) VYD ON SC.KODTOW = VYD.KODTOW AND SC.KODDOK=VYD.KODSCE WHERE SC.KODDOK=?M_KODSCE...
27 ноя 18, 10:52    [21745794]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 266
Dima T
MaestroEv
То есть подселект - может быть как обычный селект? Вот такой синтаксис мне понятен, но дает ошибку. Что не так?

Да, подселект можно запустить без внешнего, если не используются поля внешнего.

SELECT SUM(BB.KOLVO) AS KOLVYD,BB.KODTOW 
          FROM DOKUMNAK AA,NAKLAD BB 
          WHERE AA.KODSCE=?M_KODSCE AND AA.KOD=BB.KODDOK
          GROUP BY KODTOW 

Сначала пишется WHERE а потом GROUP BY.
Фокс такое пропустит, а MySQL ругнется. В остальном вроде правильно.


Огромное спасибо. Значит справлюсь. Отдельно протестирую подселект.
А вообще в подселекте в итоговом селекте использовать поля внешнего можно?
27 ноя 18, 11:20    [21745823]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
Dima T
Member

Откуда:
Сообщений: 13344
MaestroEv
А вообще в подселекте в итоговом селекте использовать поля внешнего можно?

Можно, но нежелательно. В этом случае для каждой записи внешнего запроса будет выполнен отдельный подзапрос.
Т.е. подзапрос отработает много раз и в результате получим тормоз.
Хотя возможно оптимизатор найдет более удачный план выполнения запроса и тормозов не будет.
27 ноя 18, 12:44    [21745962]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 266
Спасибо.
Очередной вопрос. Они усложняются. :)

Таблица Naklad ссылается полем kodsce на таблицу Schet в которой есть поле kodkli - ссылка на таблицу Klient.

Мне надо выбрать накладные и в них показать имя клиента, ссылка на которого есть только в счете.
Пример такого синтаксиса покажите, плиз?
7 дек 18, 07:08    [21756565]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
asdor
Member

Откуда: Москва
Сообщений: 436
select k.name
from Naklad  n inner join
Schet s on n.kodsce =s.id inner join
Klient k on s.kodkli = k.id

Прочтите что нибудь на эту тему
7 дек 18, 07:47    [21756581]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 266
С новым годом! Приветствую всех.

Еще один вид селектов используемых мной в Фоксе не могу перевести на язык MySql.
Надо определить если ли заказ этого товара в этот день?
То есть выбрать записи из таблицы-шапки(DOKUMZAP и таблицы-позиции(ZAP) те, у которых в шапке дата нужная, а позициях есть товар нужный.

Делал на Фоксе так:
*********************
PARAMETERS M.SYSDAT,M.KODTOW
********************
SELECT AA.KOD,AA.NOMER,AA.DATA,BB.KOLVO,BB.CENA,BB.KODTOW,AA.DOPOL FROM DOKUMZAP AA,ZAK BB ;
WHERE AA.DATA=M.SYSDAT AND AA.KOD=BB.KODDOK AND BB.KODTOW=M.KODTOW INTO CURS ExistZAP
********************
Понимаю, что надо делать Join, но как бы какую вязать к какой Шапку к позициям или позиции к шапке?
Нет уверенности. Помогите.
10 янв 19, 07:15    [21781194]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
Dima T
Member

Откуда:
Сообщений: 13344
Я же это уже писал 21714529

Тут обычный join
SELECT AA.KOD,AA.NOMER,AA.DATA,BB.KOLVO,BB.CENA,BB.KODTOW,AA.DOPOL ;
    FROM DOKUMZAP AA join ZAK BB on AA.KOD=BB.KODDOK;
    WHERE AA.DATA=M.SYSDAT AND BB.KODTOW=M.KODTOW
10 янв 19, 07:20    [21781196]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 266
Спасибо. То есть в JOIN нет особой разницы какую таблицу к какой вязать?
Это я себе лишнего накрутил?
10 янв 19, 07:40    [21781207]     Ответить | Цитировать Сообщить модератору
 Re: Правильная работа с MySQL  [new]
Dima T
Member

Откуда:
Сообщений: 13344
MaestroEv
Спасибо. То есть в JOIN нет особой разницы какую таблицу к какой вязать?

Если речь о том что "AA join BB" или "BB join AA", то без разницы. Оба варианта равнозначны.
10 янв 19, 07:48    [21781208]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
Все форумы / FoxPro, Visual FoxPro Ответить