Внутреннее соединение с 3 таблицами - PullRequest
1 голос
/ 12 октября 2019

У меня есть 3 таблицы для извлечения данных,

mstr_store(new_site, Site_name...)
Sale_fy1819(New_site, MC_Code, Net_Sale_Units, dt...)
Sale_fy1920(New_site, MC_Code, Net_Sale_Units, dt...)

Я ожидаю ниже результата,

--------------------------------------------------------------------
Store | MC_Code | Net_sale_units (fy1819) | Net_sale_units (fy1920)
--------------------------------------------------------------------

Я написал код ниже, но показывает ошибку 1066, пожалуйста, помогите мнечтобы понять правильный способ кодирования запросов такого типа.

SELECT 
    mstr_store.NEW_SITE,
    sale_fy1819.MC_Code,
    sale_fy1819.Net_Sales_Units,
    sls_fy1920.Net_Sales_Units
FROM
    mstr_store,
    sale_fy1819,
    sls_fy1920
        INNER JOIN
    sale_fy1819 ON mstr_store.NEW_SITE = sale_fy1819
        INNER JOIN
    sls_fy1920 ON sale_fy1819.Store_Code = sls_fy1920.Store_Code
WHERE
    sale_fy1819.DT >= '2018-09-01'
        AND sale_fy1819.dt <= '2018-09-30'
        AND sls_fy1920.dt >= '2019-09-01'
        AND sls_fy1920 <= '2019-09-30';

Ответы [ 3 ]

0 голосов
/ 12 октября 2019
FROM
    mstr_store,
    sale_fy1819,
    sls_fy1920
        INNER JOIN
    sale_fy1819 ON mstr_store.NEW_SITE = sale_fy1819
        INNER JOIN
    sls_fy1920 ON sale_fy1819.Store_Code = sls_fy1920.Store_Code

вы написали sls_fy1920 и sale_fy1819 дважды. Вы должны удалить их.

FROM
    mstr_store
        INNER JOIN
    sale_fy1819 ON mstr_store.NEW_SITE = sale_fy1819
        INNER JOIN
    sls_fy1920 ON sale_fy1819.Store_Code = sls_fy1920.Store_Code
0 голосов
/ 13 октября 2019

В вашем коде есть синтаксические ошибки, и это то, что создает вам проблему. Я добавил комментарии (#) к двум строкам с проблемами. Вы также включили таблицы, к которым вы присоединились, и это доставило бы вам проблемы. Я также переместил совпадение дат из объединения в объединение, чтобы ускорить его и сделать код более чистым.

SELECT 
   mstr_store.NEW_SITE,
   sale_fy1819.MC_Code,
   sale_fy1819.Net_Sales_Units,
   sls_fy1920.Net_Sales_Units
FROM
   mstr_store
      INNER JOIN
         # You have to define what column in sale_fy1819, my guess is that it is called site but correct it!!
         sale_fy1819 ON mstr_store.NEW_SITE = sale_fy1819.site 
         AND sale_fy1819.dt between '2018-09-01' and '2018-09-30'
      INNER JOIN
         sls_fy1920 ON sale_fy1819.Store_Code = sls_fy1920.Store_Code
         AND sls_fy1920.dt between '2019-09-01' and '2019-09-30'
0 голосов
/ 12 октября 2019

Я предполагаю, что вы хотите запрос агрегации:

SELECT s.NEW_SITE, fy1819.MC_Code, fy1819.Net_Sales_Units,
       fy1920.Net_Sales_Units
FROM mstr_store s JOIN
     (SELECT new_site, MC_Code, SUM(Net_Sales_Units) as net_sales_units
      FROM sale_fy1819
      WHERE sale_fy1819.DT >= '2018-09-01' AND sale_fy1819.dt <= '2018-09-30'
      GROUP BY new_site, MC_Code
     ) fy1819
     ON s.NEW_SITE = fy1819.new_site JOIN
     (SELECT new_site, MC_Code, SUM(Net_Sales_Units) as net_sales_units
      FROM sale_fy1920
      WHERE sale_fy1920.DT >= '2019-09-01' AND sale_fy1920.dt <= '2019-09-30'
      GROUP BY new_site, MC_Code
     ) fy1920
     ON s.NEW_SITE = fy1920.new_site AND fy1920.mc_code = fy1819.mc_code;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...