Оставлено присоединение к вложенному оператору выбора с использованием 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
, вы должны проверить, какое имя таблицы является текущим.