Оставлено присоединение к вложенному оператору выбора с использованием 3 таблиц

Я не уверен в лучшем способе решить эту проблему с тремя таблицами. Возможно, есть функция, которую я могу использовать?
CustID является основным первичным ключом, и мне нужно объединить данные о продажах из таблицы 3. Данные о продажах должны быть прикреплены к таблице в соответствии с CustID. Проблема состоит в том, что данные о продажах из таблицы 3 не содержат информации о CustID, а содержат только серийный номер и информацию о продажах.

Как я могу использовать левое соединение и правильно прикрепить то, что мне нужно?

Дополнительные вопросы:

Я плохо понимаю, когда можно вызывать данные для перекрестных ссылок.

1.) Могу ли я ссылаться на numid вне вложенного оператора выбора позже в запросе, даже если он был закодирован во вложенном операторе выбора?

2.) Могу ли я сделать MySQL ссылочными данными в операторе where, даже если я не извлекал столбец данных в операторе select? (Я ссылаюсь на таблицу в утверждении from, хотя).

3.) Если я переименую table2 в моем операторе from на tb2. В будущем в рамках вложенного оператора select я все равно буду ссылаться на table2 как "tb2"?

Спасибо за помощь.

 Table1
 CustID    serialnumber
   1           1261
   2           6337
   3           1412
   4           6128
   5           1231
 Table2
 CustID    Address   Name    Joindate
   1        xxxx     xxx     xx/xx/xxx
   2        xxxx     xxx     xx/xx/xxx
   3        xxxx     xxx     xx/xx/xxx
 Table3    
 SerialNumber  Purchasedate     email      Sale
      1261      xx/xx/xxxx     xx@xx.com   $20
      1261      xx/xx/xxxx     xx@xx.com   $30
      1261      xx/xx/xxxx     xx@xx.com   $5.99
      1261      xx/xx/xxxx     xx@xx.com   $5.00
      6337      xx/xx/xxxx     xx@xx.com   $72
      1412      xx/xx/xxxx     xx@xx.com   $5.00 
      1412      xx/xx/xxxx     xx@xx.com   $5.00
      1412      xx/xx/xxxx     xx@xx.com   $5.00
      6128      xx/xx/xxxx     xx@xx.com   $5.00
      1231      xx/xx/xxxx     xx@xx.com   $5.00
      1261      xx/xx/xxxx     xx@xx.com   $5.00
select * from Table2 
left join
(select 
Table1.serialnumber as "num", 
Table1.CustID as "numid",
Table3.purchasedate,
Table3.email, 
sum(Table3.Sale)
from 
Table3, Table1 
where Purchasedate between 
date(xx/xx/xxxx) and date(xx/xx/xxxx) 
and Table3.SerialNumber = num)) tblxxx on CustID using numid)
where joindate between date(xx/xx/xxxx) and date(xx/xx/xxxx);

Мои ожидаемые результаты будут следующими:

 CustID  Address   Name    Joindate  num   numid   purchasedate  email  Sale
   1      xxxx     xxx     xx/xx/xx  1261    1       xx/xx/xx   x@x.com  $390
   2      xxxx     xxx     xx/xx/xx  6337    2       xx/xx/xx   x@x.com  $72
   3      xxxx     xxx     xx/xx/xx  1412    3       xx/xx/xx   x@x.com  $15

1 ответ

Решение
SELECT
    *
FROM
    table2
INNER JOIN table1 ON table1.CustID = table2.CustID
INNER JOIN (
    SELECT
        SerialNumber,
        SUM(Sale) AS sales
    FROM
        table3
    WHERE
        Purchasedate BETWEEN date(xx / xx / xxxx)
    AND date(xx / xx / xxxx)
    GROUP BY
        SerialNumber
) AS table3 ON table3.SerialNumber = table1.serialnumber
WHERE joindate BETWEEN date(xx / xx / xxxx) AND date(xx / xx / xxxx);

Присоедините table1 к table2, используя CustID.

Присоединяйся к SUM продаж из таблицы 3, сгруппированных по серийному номеру в таблицу 1 с использованием серийного номера. Используя WHERE-В пункте вы можете указать, какие продажи следует учитывать.

Добавьте предложение WHERE во внешний запрос.

2.) Могу ли я сделать MySQL ссылочными данными в операторе where, даже если я не извлекал столбец данных в операторе select? (Я ссылаюсь на таблицу в утверждении from, хотя).

Да. SELECT а также WHERE положения не зависят друг от друга. Вы могли бы даже написать что-то вроде 1 = 1 в вашем WHERE-clause. Также что-то вроде SELECT "abcds345234" работает.

3.) Если я переименую table2 в моем операторе from на tb2. В будущем в рамках вложенного оператора select я все равно буду ссылаться на table2 как "tb2"?

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

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

Другие вопросы по тегам