запрос выбора нескольких таблиц - PullRequest
0 голосов
/ 29 апреля 2020

Hí,

Мне нужно выбрать все COMISSIONARIO и все FATURA их. Но я понятия не имею, как это сделать. Я пробовал один запрос как изображение ниже, но он не работает. Он показывает все FATURA , но только один COMISSIONARIO FATURA

Запрос

Диаграмма

1 Ответ

0 голосов
/ 29 апреля 2020

Я немного поменяю ваш запрос, начиная с вашего последнего предложения WHERE, основываясь на каком-то статусе. Так как таблица Comissionario ГДЕ «Обязательна» в статусе, я переместил ее во вторую позицию запроса. Затем вернули остальные таблицы обратно к таблице фатуры.

select
        f.valor valor_fatura,
        f.numero numero,
        f.id_cliente,
        des.nome despachante,
        v.nome vendedor,
        tipo.tipo tipo_commisionado,
        u.unidade unidade_cobranca,
        com.valor_comissao taxa,
        if( u.unidade = 'moeda',
                com.valor_comissao,
                FORMAT(( ( com.valor_comissao * f.valor ) / 100 ), 2 )
            ) valor_comissao,
        f.created_at,
        f.updated_at,
        f.created_by,
        f.updated_by
    from
        -- start with all commisionario status (alias cs)
        ComissionarioStatus cs
            -- now on to comissionario (alias com) that match key status
            JOIN comissionario com
                on cs.id_comissionariostatus = com.id_comissionariostatus
                -- now the tipo and unicob with shorter alias
                left join ComissionarioTipo tipo
                    on com.id_comissionariotipo = tipo.id_comissionariotipo
                left join Unicob u
                    on com.id_unicob = u.id_unicob
                -- now getting the individual
                join Individuo des
                    on com.id_comissionado = des.id_individuo
                    join captacao cap
                        on des.id_individuo = cap.id_despachante
                        left join proposta p
                            on cap.id_proposta = p.id_proposta
                            left join Individuo v
                                on p.id_vendedor = v.id_individuo
                        join fatura f
                            on cap.id_captacao = f.id_captacao 
    where
        -- where the one status you want
        cs.status = 'ativo'     

Это было только первое начало, но если вы посмотрите на свой запрос, вы попытаетесь найти записи Fatura, связанные с записями Comissionario, поэтому чтобы получить каждый из них, вам нужен обычный JOIN для объединения записей.

Кроме того, если вы посмотрите на уровень отступа таблиц, вы увидите, как я переходил от одной таблицы к другой и как Ключ ID из левой таблицы (первая таблица) совпадает с идентификатором из правой таблицы (вторая таблица присоединяется к TO). Я полагаю, увидев, как A -> B -> C, вы сначала гарантируете отношения между таблицами. Необязательно будет левый присоединиться, как вы изначально имели на некоторых. Но так как ваше предложение where было основано на указанном c статусе, это заставляет любого левого соединения попасть в таблицу comissionario в JOIN. Итак, теперь, чтобы перейти от этого к фатуре, каждое последующее связанное также должно быть объединением с левым соединением.

Теперь, после всего сказанного, давайте попробуем уточнить, что вы ищете в конечном результате. , Ваша диаграмма показала много таблиц и связей, но сделайте шаг назад. Каковы ваши необходимые детали ... Что-то из таблицы Comissionario И таблицы Fatura? Если это так, предоставьте кратчайшую ссылку на таблицы взаимосвязей, которые переходят от одной к другой. Все это будут прямые условия СОЕДИНЕНИЯ. Начните свой запрос с этого. Как только вы получите ТО, решенное, теперь начните прикреплять другие элементы с левыми соединениями, где это применимо. Например, я бы добавил вашу таблицу ComissionarioStatus со следующим указанным статусом c.

Когда вы постепенно добавляете каждую дополнительную таблицу с помощью JOIN или LEFT JOIN, выясните, какая из них нарушает ожидаемый набор результатов, и спросите себя, почему ... Это должно быть LEFT JOIN? или нет.

с использованием более коротких, но несколько значимых псевдонимов к таблицам тоже могут помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...