我不确定用三个表解决此问题的更好方法。也许有一个我可以使用的功能?
CustID是主要的主键,我需要加入Table3的销售数据。应根据CustID将销售数据附加到表中。问题是来自table3的销售数据没有CustID信息,只有序列号和销售信息。
附带问题:
我对何时可以调用数据进行交叉引用有所了解。
1。)我可以在查询后面的嵌套select语句之外引用numid,即使它是在嵌套的select语句中编码的吗?
2.。)即使我没有在select语句中提取数据列,我还能在where语句中创建mysql引用数据吗? (我在from语句中引用了表格。)
3。)如果我将from语句中的table2重命名为“tb2”。将来在嵌套的select语句中,我仍然会将table2称为“tb2”吗?
hijack
我的预期结果如下:
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);
答案 0 :(得分:0)
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);
使用CustID将table1连接到table2。
使用序列号将serialnumber分组的table3的销售额SUM
加入table1。通过使用WHERE
- 子句,您可以指定要考虑的销售额。
在外部查询中添加'WHERE'子句。
2.。)即使我没有在select语句中提取数据列,我还能在where语句中创建mysql引用数据吗? (我在from语句中引用了表格。)
是。 SELECT
和WHERE
子句彼此独立。您甚至可以在1 = 1
- 子句中编写WHERE
之类的内容。像SELECT "abcds345234"
这样的东西也有效。
3。)如果我将from语句中的table2重命名为“tb2”。将来在嵌套的select语句中,我仍然会将table2称为 “TB2”?
您想为表提供别名。在尝试再次引用它时,你必须注意你正在移动的环境。
如果您在同一个SUBSELECT
中,则使用相同的别名来引用它。如果您离开SUBSELECT
,则必须检查表格的当前名称。