mysql - замена значений столбца их соответствующими значениями из 2 разных таблиц - PullRequest
0 голосов
/ 25 февраля 2019

Итак, я пытаюсь написать запрос из базы данных READ-ONLY, которая в основном покажет мне взаимосвязь между родительскими и дочерними значениями, а также некоторую дополнительную информацию из других таблиц.

Я получилзапрос почти там, где я хочу, но я пытаюсь заменить несколько значений соответствующими именами и адресами электронной почты

Демо здесь

В основном я пытаюсь отразить Имя иАдрес электронной почты, указанный в таблице адресов электронной почты и учетных данных, соответствует соответствующему AcctID, указанному в текущем месте столбцов «Родительское имя» и «Родительский адрес электронной почты».то есть.«Джон Смит» вместо «1a2b» в «Родительском имени» и «test @ test» вместо «1a2b» в «Родительском электронном письме»

Сначала я попытался использовать оператор case, но думаю, что это, вероятно, что-то с объединениями.Я пропал.

Заранее спасибо за любую помощь, ребята.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вам просто нужно присоединиться к таблицам credentials и email снова , чтобы извлечь родительские данные:

select
    cr1.data                as "Parent Name",
    e1.email                as "Parent Email",
    cr.data                 as "Child Name",
    e.email                 as "Child Email",
    sum(a.amount)           as "Amount",
    (sum(a.amount)*2.5/100) as "% of Amount"

from 
    email e
join
    class c
        on e.AcctID = c.AcctID
left join
    relationship r 
        on c.AcctID = r.child
left join
    amount a
        on e.AcctID = a.AcctID
left join
    credentials cr
        on e.AcctID = cr.AcctID and cr.value = 1
left join
    credentials cr1
        on r.Parent = cr1.AcctID and cr1.value = 1
left join
    email e1
        on e1.AcctId = r.Parent
where
    c.relationship = 'child'
group by 
    cr1.data, e1.email, cr.data, e.email
order by
    cr1.data

Вывод:

Parent Name     Parent Email    Child Name  Child Email     Amount  % of Amount
                so@so                       add@add         10.36   0.259000
John Smith      Test@Test       Jane Smith  email@email     24.72   0.618000

Демонстрация на dbfiddle

0 голосов
/ 25 февраля 2019

Если я правильно понимаю, вам просто нужно join email таблица дважды.Запрос выглядит следующим образом:

select r.parent as "Parent Name",
       ep.email as "Parent Email",
       cr.data as "Child Name",
       ec.email as "Child Email",
       sum(a.amount) as "Amount",
       (sum(a.amount)*2.5/100) as "% of Amount"
from class c left join
     relationship r 
     on c.AcctID = r.child left join
     email ec
     on ec.AcctId = r.child left join
     email ep
     on ep.AcctId = r.parent left join
     amount a
     on c.AcctID = a.AcctID left join
     credentials cr
     on c.AcctID = cr.AcctID and cr.value = 1
where c.relationship = 'child'
group by r.Parent, ep.email, cr.data, ec.email
order by r.Parent;

Здесь - ваша db <> скрипка с фиксированным запросом.

Обратите внимание, что это также исправляет ваши join условия(так что ничто не присоединяется к таблицам email, как только они внесены).И это также упрощает group by клавиши.

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